PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое условный тип?

Продвинутые темы

Условный тип (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>;   // string

infer позволяет «извлечь» тип внутри условия.

Распределение по 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.

Другие вопросы раздела