Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Тип за замовчуванням у дженерику». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Так, у TypeScript можна вказати **тип за замовчуванням для generic-параметра** через `<T = DefaultType>` - так само, як і для аргументів функції; це називається default generic type parameter. **Ключове:** тип за замовчуванням застосовується лише тоді, коли TypeScript не зміг вивести тип сам, а в списку параметрів параметр з дефолтом має йти після параметрів без дефолта.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняУ 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>` | Обов'язкові -> потім з дефолтом |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.