Передовые практики использования условной логики в TypeScript

Передовые практики использования условной логики в TypeScript

В этой статье объясняются лучшие практики для работы с условной логикой в TypeScript.

YouTube Video

Передовые практики использования условной логики в TypeScript

Узкая специализация типов с помощью защит типа

Используя систему типов TypeScript и применяя защиту типа внутри операторов if, вы можете улучшить типобезопасность и читаемость кода.

1function processInput(input: string | number) {
2    if (typeof input === "string") {
3        console.log(`String input: ${input.toUpperCase()}`);
4    } else {
5        console.log(`Number input: ${input.toFixed(2)}`);
6    }
7}

Использование typeof и других защит типов обеспечивает безопасность типов и контекстуальную уместность кода внутри каждого блока.

Избегайте вложенных операторов if

Сильно вложенные операторы if снижают читаемость и поддерживаемость кода. Вместо этого используйте ранний выход, логические операторы или извлечение функций.

Плохой пример:

1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2    if (user.age) {
3        if (user.age > 18) {
4            if (user.isAdmin) {
5                console.log("User is an adult admin.");
6            }
7        }
8    }
9}

Улучшенный пример:

1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2    if (!user.age || user.age <= 18 || !user.isAdmin) {
3        return;
4    }
5    console.log("User is an adult admin.");
6}

Этот подход упрощает код и делает логику более понятной.

Используйте опциональную цепочку

При проверке вложенных свойств используйте опциональную цепочку (?.), чтобы избежать лишних условий if.

Без опциональной цепочки:

1if (user && user.profile && user.profile.email) {
2    console.log(user.profile.email);
3}

С использованием опциональной цепочки:

1if (user?.profile?.email) {
2    console.log(user.profile.email);
3}

Это уменьшает количество шаблонного кода и улучшает читаемость. Здесь под шаблонным кодом подразумевается повторяющийся, стандартизированный код, который часто необходим для выполнения определенных задач в программировании.

Используйте операторы строгого равенства

TypeScript поддерживает строгую типизацию, а использование операторов строгого равенства (===) или строгого неравенства (!==) помогает предотвратить неожиданное приведение типов.

Плохой пример:

1if (value == "123") {
2    console.log("Value is 123.");
3}

Улучшенный пример:

1if (value === "123") {
2    console.log("Value is 123.");
3}

Используйте перечисления или литеральные типы для явных условий

Использование перечислений или литеральных типов уточняет условия и снижает вероятность ошибок.

 1type Status = "success" | "error" | "loading";
 2
 3function displayMessage(status: Status) {
 4    if (status === "success") {
 5        console.log("Operation succeeded.");
 6    } else if (status === "error") {
 7        console.log("Operation failed.");
 8    } else {
 9        console.log("Loading...");
10    }
11}

Определяя ожидаемые значения, TypeScript может обнаруживать типы и обеспечивать точность.

Объединяйте схожие условия

Когда несколько условий имеют одинаковую логику, объединяйте их с помощью логических операторов или оператора switch.

Плохой пример:

1if (role === "admin") {
2    grantAccess();
3}
4if (role === "superadmin") {
5    grantAccess();
6}

Улучшенный пример:

1if (role === "admin" || role === "superadmin") {
2    grantAccess();
3}

Или используйте оператор switch для обработки нескольких чётких ветвей:

 1switch (role) {
 2    case "admin":
 3    case "superadmin":
 4        grantAccess();
 5        break;
 6    case "user":
 7        console.log("Limited access.");
 8        break;
 9    default:
10        console.log("No access.");
11}

Избегайте усложнения условных выражений

Сложные условные выражения в конструкциях if ухудшают читаемость. Выносите их в осмысленные переменные или функции.

Плохой пример:

1if (user.age > 18 && user.isAdmin && user.permissions.includes("write")) {
2    console.log("User can write.");
3}

Улучшенный пример:

1const isAdultAdminWithWriteAccess = user.age > 18 && user.isAdmin && user.permissions.includes("write");
2if (isAdultAdminWithWriteAccess) {
3    console.log("User can write.");
4}

Именование условий улучшает ясность и делает код самодокументирующимся.

Используйте тернарные операторы для простых условий

Для простых условий использование тернарных операторов делает код более лаконичным.

Пример:

1const message = isLoggedIn ? "Welcome back!" : "Please log in.";
2console.log(message);

Однако избегайте использования тернарных операторов для сложных условий, так как это снижает читаемость.

Заключение

Следуя этим рекомендациям, вы можете сделать конструкции if в TypeScript понятными, эффективными и удобными для сопровождения. Используйте возможности TypeScript, такие как защитные конструкции типов, опциональные цепочки и перечисления, чтобы улучшить читаемость и надёжность вашего кода. Делайте условия лаконичными и понятными, стремясь к тому, чтобы ваш код всегда был лёгким для понимания и сопровождения.

Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.

YouTube Video