Модульні уроки (1/2)
Умовні типи та висновок
Умовні типи дозволяють виражати нетривіальні рішення щодо типів на основі зв’язків успадкування. Синтаксис нагадує тернарний оператор JavaScript:
T extends U ? X : YЯкщо тип T можна призначити U, тоді результуючий тип буде X, інакше він буде Y.
Основні умовні типи
Умовний тип оцінює умову під час компіляції:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseЦей шаблон є надзвичайно потужним у поєднанні з універсалами для створення гнучких і динамічних типів утиліт.
Введіть вилучення за допомогою infer
Всередині пропозиції extends умовного типу ми можемо використовувати ключове слово infer, щоб оголосити змінну типу, яка буде виведена компілятором.
Наприклад, якщо ми хочемо отримати тип повернення функції:
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
Створіть загальний тип під назвою IsString<T>, який повертає тип літералу true, якщо T розширює рядок, інакше false.
Показати підказку
Використовуйте тип синтаксису IsString<T> = T extends string ? true : false; щоб перевірити тип.
Рішення доступне після 3 спроб
Вправа 2: Вилучення типу з масиву за допомогою infer
Визначте загальний тип UnpackArray<T>, який використовує infer для вилучення типу елемента масиву T. Якщо T є масивом (наприклад, U[]), поверніть U, інакше поверніть той самий тип T.
Показати підказку
Використовуйте T extends (виведіть U)[] ? U : T для оголошення та повернення виведеної змінної типу U.
Рішення доступне після 3 спроб