Skip to main content

Як оголосити функцію з generic-параметром?

Базовий синтаксис

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

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

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

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