TypeScript: Generics

Что такое дженерики?

Дженерики позволяют создавать переиспользуемые и гибкие компоненты, работающие с разными типами. Тип параметризуется и конкретизируется в момент использования.

function identity<Type>(arg: Type): Type {
  return arg;
}
 
identity<string>("hello");
identity(42); // Type выведется как number

extends — ограничение типа

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[]