Skip to main content

Тип за замовчуванням у дженерику

У TypeScript можна вказати тип за замовчуванням для generic-параметра - так само, як і для аргументів функції. Це називається default generic type parameter.


Синтаксис

javascript
type MyType<T = DefaultType> = ...

або для функції:

javascript
function myFunc<T = DefaultType>(arg: T) { ... }

Якщо під час використання generic-типу/функції тип явно не вказаний, TypeScript візьме значення за замовчуванням.


Приклад 1: тип за замовчуванням у функції

javascript
function wrap<T = string>(value: T): { data: T } { return { data: value }; } wrap("hi"); // T = string (за аргументом) wrap(42); // T = number (інференс) wrap(); // T = string (тип за замовчуванням)

Тут, якщо TypeScript не може вивести тип T, він бере string.


Приклад 2: тип за замовчуванням у type-визначенні

javascript
type Response<T = string> = { data: T; success: boolean; }; const r1: Response = { data: "ok", success: true }; // T = string const r2: Response<number> = { data: 200, success: true }; // T = number

Часто застосовують, щоб спростити використання типу без необхідності явно вказувати generic.


Приклад 3: кілька параметрів з різними значеннями за замовчуванням

javascript
type Pair<T = string, U = number> = [T, U]; const a: Pair = ["age", 25]; // [string, number] const b: Pair<boolean, string> = [true, "ok"]; // [boolean, string]

Приклад 4: використання в інтерфейсах

javascript
interface ApiResponse<T = any> { data: T; error?: string; } const res1: ApiResponse = { data: "ok" }; // T = any const res2: ApiResponse<number> = { data: 42 }; // T = number

Приклад 5: у функціях з обмеженням (extends)

javascript
function getValue<T extends object = { id: number }>(obj: T): T { return obj; } getValue(); // T = { id: number }

Важливо

  1. Тип за замовчуванням використовується тільки якщо TypeScript не зміг вивести тип.
  2. Якщо тип можна вивести за аргументом, значення за замовчуванням ігнорується.
  3. У списку generic-параметрів параметр з дефолтом має йти після параметрів без дефолта:
javascript
// ok type Example<T, U = string> = ... // Помилка type Bad<U = string, T> = ...

Підсумок

МожливістьПрикладОпис
Тип за замовчуванням<T = string>Використовується, якщо TS не вивів тип
У type-визначенніtype Box<T = number>Універсальна структура
У функціїfunction fn<T = any>()Часто для fallback-типу
З обмеженням<T extends object = {}>Можна поєднувати з extends
Порядок параметрів<T, U = string>Обов'язкові -> потім з дефолтом

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.