Поиск по сайту
Ctrl + K
Вопросы по TS

Чем отличаются вывод типов и контекстная типизация в TypeScript?

В TypeScript существует несколько механизмов работы с типами, которые помогают разработчикам писать безопасный и предсказуемый код. Два таких механизма – это вывод типов (type inference) и контекстная типизация (contextual typing). В этой статье мы подробно рассмотрим эти два подхода, приведем примеры и разъясним, когда и как они применяются.

Вывод типов (Type Inference)

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

Пример вывода типов

let message = "Hello, TypeScript!"; // TypeScript выводит тип как string
let count = 42; // TypeScript выводит тип как number

msg = "New message"; // Корректно, изменяем строку
count = 100; // Корректно, изменяем число

// Пример с ошибкой
message = 5; // Ошибка: Type 'number' is not assignable to type 'string'

В этом примере переменные message и count имеют типы, которые были выведены на основе их начальных значений.

Контекстная типизация (Contextual Typing)

Контекстная типизация применяется, когда TypeScript может определить тип переменной на основе контекста, в котором она используется. Это часто происходит с функциями обратного вызова (callback functions) и методами, где TypeScript понимает, какой тип ожидается.

Пример контекстной типизации

interface User {
    name: string;
    age: number;
}

const users: User[] = [
    {name: "Alice", age: 30},
    {name: "Bob", age: 25}
];

users.forEach(user => {
    // TypeScript понимает, что user имеет тип User
    console.log(`${user.name} is ${user.age} years old.`);
});

В данном примере TypeScript понимает, что переменная user внутри функции обратного вызова имеет тип User, поскольку она используется в контексте массива users, тип которого уже известен.

Сравнение

  • Вывод типов: используется, когда тип можно определить по значению переменной, например, при объявлении переменных, без явного указания типа.
  • Контекстная типизация: используется, когда тип переменной можно определить на основе контекста, в котором она используется, например, в функциях обратного вызова.

Заключение

Вывод типов и контекстная типизация делают работу с TypeScript более удобной и безопасной, позволяя разработчикам меньше беспокоиться о необходимости указывать типы и одновременно предотвращая множество потенциальных ошибок. Понимание этих концепций будет полезно для любого начинающего разработчика, работающего с TypeScript.