Что такое условный тип?
Продвинутые темы
Условный тип (conditional type) — это тип TypeScript вида T extends U ? X : Y, который выбирает один из двух типов в зависимости от проверки. Это аналог тернарного оператора на уровне типов.
Синтаксис
type IsString<T> = T extends string ? 'да' : 'нет';
type A = IsString<string>; // 'да'
type B = IsString<number>; // 'нет'Практический пример
type ElementType<T> = T extends (infer U)[] ? U : T;
type A = ElementType<number[]>; // number
type B = ElementType<string>; // stringinfer позволяет «извлечь» тип внутри условия.
Распределение по union
Условные типы распределяются по union-типам:
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]Где применяют
- Встроенные utility types построены на условных типах:
Exclude,Extract,NonNullable,ReturnType.
type NonNullable<T> = T extends null | undefined ? never : T;
type ReturnType<T> = T extends (...args: any) => infer R ? R : never;Коротко для собеседования
Условный тип T extends U ? X : Y выбирает тип по проверке (тернарник для типов). С infer извлекает вложенные типы, распределяется по union. На нём построены Exclude, Extract, NonNullable, ReturnType.