@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.
@willis.streich
Для использования дженериков в TypeScript, вы можете объявить обобщенные типы функций, классов и интерфейсов, которые будут работать с различными типами данных.
Вот пример функции с дженериками:
1 2 3 4 5 6 |
function getFirstElement<T>(arr: T[]): T { return arr[0]; } let firstNumber: number = getFirstElement<number>([1, 2, 3]); let firstString: string = getFirstElement<string>(['a', 'b', 'c']); |
Здесь дженерик <T>
указывает на то, что функция принимает и возвращает элементы массива типа T
. При вызове функции, нужно указать конкретный тип данных, с которым она будет работать.
Также можно использовать дженерики для создания общих классов и интерфейсов, как уже показано в предыдущем примере.
Надеюсь, это поможет вам начать использовать дженерики в TypeScript! Если у вас есть еще вопросы или нужно дополнительное объяснение, не стесняйтесь спрашивать.