Generic (или Обобщения) в TypeScript позволяют создавать более гибкие и многократно используемые компоненты. В приведённых примерах мы рассмотрели обобщённые функции, классы и интерфейсы, которые могут работать с различными типами данных, что делает код более универсальным и типобезопасным.
Что такое Generic
В TypeScript Generic (обобщения) позволяют создавать компоненты, которые работают с множеством типов, вместо одного. Это делается с использованием параметров типов. Вот примеры использования обобщений для функции, класса и интерфейса.
Generic Функция
Обобщённая функция принимает параметр типа и работает с ним:
function identity<T>(arg: T): T {
return arg;
}
// Пример использования:
let output1 = identity<string>("Hello"); // Вывод: "Hello"
let output2 = identity<number>(42); // Вывод: 42
В этом примере T является параметром типа, который определяет тип аргумента и возвращаемого значения функции identity.
Generic Класс
Обобщённый класс может работать с различными типами данных:
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
constructor(zeroValue: T, addFunction: (x: T, y: T) => T) {
this.zeroValue = zeroValue;
this.add = addFunction;
}
}
// Пример использования:
let myGenericNumber = new GenericNumber<number>(0, (x, y) => x + y);
console.log(myGenericNumber.add(5, 10)); // Вывод: 15
В этом примере T позволяет классу GenericNumber быть параметризованным любым типом данных, таким как number, string, и т.д.
Generic Интерфейс
Обобщённый интерфейс описывает структуру данных, которая может использоваться с различными типами:
interface GenericIdentityFn<T> {
(arg: T): T;
}
function identityFunction<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn<number> = identityFunction;
console.log(myIdentity(10)); // Вывод: 10
В этом примере интерфейс GenericIdentityFn определяет обобщённую функцию, которая принимает и возвращает значение одного и того же типа T.