@willis.streich
Дженерики позволяют создавать общие типы и функции, которые могут работать с различными типами данных без необходимости явного указания типа. TypeScript позволяет использовать дженерики для обеспечения типобезопасности в коде.
Например, рассмотрим функцию, которая принимает массив и возвращает первый элемент:
1 2 3 |
function getFirstElement(arr: any[]): any { return arr[0]; } |
Эта функция может принимать массив любого типа, но возвращает тип any, что не очень удобно. Мы можем использовать дженерик для обеспечения более точной типобезопасности:
1 2 3 |
function getFirstElement<T>(arr: T[]): T { return arr[0]; } |
Здесь мы использовали общую букву T вместо any. Теперь TypeScript будет знать, что тип возвращаемого значения соответствует типу элемента массива.
Дженерик также может быть использован для создания общих классов и интерфейсов:
1 2 3 4 5 6 7 8 9 10 |
interface Pair<T, U> { first: T; second: U; } class KeyValuePair<T, U> implements Pair<T, U> { constructor(public first: T, public second: U) {} } let pair = new KeyValuePair<string, number>("hello", 123); |
Здесь мы создали общий интерфейс Pair, который определяет два параметра: T и U. Затем мы создали класс KeyValuePair, который реализует этот интерфейс и использует типы string и number для параметров T и U. Создание экземпляра этого класса соответствует определенным типам данных для first и second.