Дженерики в TypeScript позволяют создавать обобщенные типы, которые могут быть параметризованы другими типами. Это позволяет создавать более гибкий и повторно используемый код.
Для правильной реализации дженериков в TypeScript, вам нужно сначала определить параметры типов, которые будут использованы в определении типа или функции. Вы можете использовать любые идентификаторы в качестве параметров типов, но обычно используются однобуквенные идентификаторы, такие как T
, U
, V
и т.д.
Примеры:
1. Дженерик-тип:
type MyGeneric<T> = { value: T; isValid: boolean; };
В этом примере MyGeneric
- это дженерик-тип, который содержит поле value
типа T
и поле isValid
типа boolean
. Вы можете использовать этот дженерик-тип в разных местах вашего кода, указывая конкретные типы для параметра T
:
const myValue: MyGeneric<number> = { value: 10, isValid: true }; const myString: MyGeneric<string> = { value: 'Hello', isValid: false };
2. Дженерик-функция:
function reverseArray<T>(array: T[]): T[] { return array.reverse(); }
В этом примере reverseArray
- это дженерик-функция, которая принимает массив array
типа T
и возвращает массив того же типа. Вы можете вызвать эту функцию с различными типами:
const numbers = [1, 2, 3, 4, 5]; const reversedNumbers = reverseArray(numbers); // [5, 4, 3, 2, 1] const strings = ['apple', 'banana', 'cherry']; const reversedStrings = reverseArray(strings); // ['cherry', 'banana', 'apple']
3. Ограничение дженерика:
function concatenate<T extends string | number>(a: T, b: T): string { return String(a) + String(b); }
В этом примере concatenate
- это дженерик-функция с ограничением типа T
, который может быть только строкой или числом. Функция принимает два аргумента типа T
и возвращает их конкатенацию в виде строки. Вы не сможете вызвать эту функцию с аргументами других типов:
const result1 = concatenate('Hello', 'World'); // "HelloWorld" const result2 = concatenate(10, 20); // "1020" const result3 = concatenate('Hello', 10); // ОШИБКА: аргументы разных типов
Это лишь несколько примеров реализации дженериков в TypeScript. В целом, дженерики позволяют создавать обобщенный код, который может работать с различными типами данных, повышая гибкость и переиспользование кода. Вы можете использовать дженерики в интерфейсах, классах, функциях, типах данных и других местах в вашем коде для создания более абстрактных и масштабируемых решений.