Вопрос проверяет понимание механизма вывода типов в условных типах TypeScript с помощью ключевого слова infer.
Ключевое слово infer — это мощный инструмент TypeScript, который позволяет объявлять переменные типа внутри условных типов. Оно используется для захвата и последующего использования части типа, который проверяется в условии. Без infer вы не смогли бы динамически извлекать внутренние типы из сложных структур.
Infer применяется только в конструкции T extends U ? X : Y, где U содержит infer. Когда TypeScript проверяет, соответствует ли T шаблону U, он выводит тип для переменной, объявленной через infer, и подставляет его в ветку X.
Рассмотрим извлечение типа элемента массива:
type ArrayElement<T> = T extends (infer U)[] ? U : never;
type Num = ArrayElement<number[]>; // number
type Str = ArrayElement<string[]>; // stringДругой пример — получение типа возвращаемого значения функции:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type Fn = (x: number) => string;
type Result = ReturnType<Fn>; // stringInfer широко используется во встроенных утилитарных типах TypeScript, таких как ReturnType, Parameters, ConstructorParameters, InstanceType. Разработчики также применяют его для создания собственных продвинутых типов, например, для извлечения типов из Promise или React-компонентов.
Infer — это ключевой механизм для работы с условными типами в TypeScript, позволяющий динамически извлекать и переиспользовать части типов. Он незаменим при создании гибких и типобезопасных абстракций, особенно в библиотеках и фреймворках, где требуется манипуляция типами на высоком уровне.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию