TypeScript: Generics
Что такое дженерики?
Дженерики позволяют создавать переиспользуемые и гибкие компоненты, работающие с разными типами. Тип параметризуется и конкретизируется в момент использования.
function identity<Type>(arg: Type): Type {
return arg;
}
identity<string>("hello");
identity(42); // Type выведется как numberextends — ограничение типа
extends ограничивает параметр-тип конкретным типом или набором типов, гарантируя наличие нужных свойств.
interface Lengthwise {
length: number;
}
function loggingIdentity<Type extends Lengthwise>(arg: Type): Type {
console.log(arg.length); // ок — знаем, что length есть
return arg;
}Значение по умолчанию
Знак = задаёт тип по умолчанию, который используется, когда T невозможно вывести (нет аргумента, из которого он выводится). Если T привязан к параметру, он выводится из аргумента, и default не срабатывает.
// T не привязан к аргументам → срабатывает default
function createState<T = number>(): T[] {
return [];
}
const nums = createState(); // T = number → number[]
const strs = createState<string>(); // T = string → string[]