Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як оголосити функцію з generic-параметром?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Функція з generic-параметром оголошується як `function name<T>(arg: T): T { return arg; }`, де `T` - це **generic-параметр** (узагальнений тип). **Ключове:** при виклику функції TypeScript сам підставить потрібний тип замість `T`, хоча його можна вказати й вручну (`identity<string>("text")`).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### Базовий синтаксис ```javascript function name<T>(arg: T): T { return arg; } ``` - `T` - **generic-параметр** (узагальнений тип). - При виклику функції TypeScript **сам підставить** потрібний тип замість `T`. --- ### Приклад 1: проста узагальнена функція ```javascript function identity<T>(value: T): T { return value; } const num = identity(42); // T = number const str = identity("hello"); // T = string ``` TypeScript розуміє, що `num` - це `number`, а `str` - `string`. --- ### Приклад 2: явна вказівка типу при виклику ```javascript function wrapValue<T>(value: T): { data: T } { return { data: value }; } const wrapped = wrapValue<string>("text"); // { data: string } ``` Тут ми **вручну вказали тип** `<string>`, хоча зазвичай TypeScript робить це автоматично. --- ### Приклад 3: декілька generic-параметрів ```javascript function merge<T, U>(a: T, b: U): T & U { return Object.assign({}, a, b); } const person = merge({ name: "Tim" }, { age: 25 }); // person має тип { name: string; age: number } ``` Можна використовувати декілька generic-параметрів (`<T, U, V, ...>`). --- ### Приклад 4: з обмеженням (`extends`) ```javascript function getLength<T extends { length: number }>(value: T): number { return value.length; } getLength("hello"); // string має length getLength([1, 2, 3]); // масив має length getLength(123); // number не має length ``` `extends` обмежує, які типи можна підставляти в `T`. --- ### Приклад 5: з масивами ```javascript function firstElement<T>(arr: T[]): T { return arr[0]; } const first = firstElement([1, 2, 3]); // number const second = firstElement(["a", "b"]); // string ``` TypeScript виводить тип елементів масиву автоматично. --- ### Підсумок | Синтаксис | Приклад | Опис | | --- | --- | --- | | `<T>` | `function foo<T>(x: T): T` | Один generic-параметр | | `<T, U>` | `function bar<T, U>(a: T, b: U)` | Декілька generic-параметрів | | `<T extends SomeType>` | `function baz<T extends object>(x: T)` | Обмеження типу | | `<T = DefaultType>` | `function qux<T = string>(x?: T)` | Значення за замовчуванням для generic |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.