Перейти до основного вмісту
Модуль 6 · Урок 1 із 211/14 у курсі~15 min
Модульні уроки (1/2)

Умовні типи та висновок

Умовні типи дозволяють виражати нетривіальні рішення щодо типів на основі зв’язків успадкування. Синтаксис нагадує тернарний оператор JavaScript:

TS
T extends U ? X : Y

Якщо тип T можна призначити U, тоді результуючий тип буде X, інакше він буде Y.


Основні умовні типи

Умовний тип оцінює умову під час компіляції:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Цей шаблон є надзвичайно потужним у поєднанні з універсалами для створення гнучких і динамічних типів утиліт.


Введіть вилучення за допомогою infer

Всередині пропозиції extends умовного типу ми можемо використовувати ключове слово infer, щоб оголосити змінну типу, яка буде виведена компілятором.

Наприклад, якщо ми хочемо отримати тип повернення функції:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

У цьому прикладі infer R повідомляє TypeScript автоматично визначати тип повернення функції та робити його доступним як R в позитивній гілці умови.


Спробуйте самі

Вправа 1: тип IsString

вправи#ts.m6.l1.e1
Спроби: 0Завантаження…

Створіть загальний тип під назвою IsString<T>, який повертає тип літералу true, якщо T розширює рядок, інакше false.

Завантаження редактора…
Показати підказку

Використовуйте тип синтаксису IsString<T> = T extends string ? true : false; щоб перевірити тип.

Рішення доступне після 3 спроб

Вправа 2: Вилучення типу з масиву за допомогою infer

вправи#ts.m6.l1.e2
Спроби: 0Завантаження…

Визначте загальний тип UnpackArray<T>, який використовує infer для вилучення типу елемента масиву T. Якщо T є масивом (наприклад, U[]), поверніть U, інакше поверніть той самий тип T.

Завантаження редактора…
Показати підказку

Використовуйте T extends (виведіть U)[] ? U : T для оголошення та повернення виведеної змінної типу U.

Рішення доступне після 3 спроб