TypeScript 泛型
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。
定义方式:
function fnName<T>(arg: T): T {
// 代码忽略不计
}其中,fnName为函数名称,T表明变量类型为泛型,T可以表示任何类型。
泛型函数
泛型函数可以接收多种类型的参数,并根据传入的参数类型来确定返回值的类型。
function testFunc <T>(arg: T): T{
//处理逻辑
return arg
}
console.log(testFunc(111));
console.log(testFunc("abc"));泛型接口
泛型接口(Generic interface)允许你定义一个接口,该接口中的一个或多个成员可以使用泛型类型参数。
// 定义一个泛型接口 Printable<T>
interface Printable<T> {
print(): T;
}
// 实现泛型接口 Printable<T>,其中 T 是 string 类型
class Printer implements Printable<string> {
private message: string;
constructor(message: string) {
this.message = message;
}
print(): string {
return this.message;
}
}
// 另一个实现泛型接口 Printable<T>,其中 T 是 number 类型
class LasterPrinter implements Printable<number> {
private value: number;
constructor(value: number) {
this.value = value;
}
print(): number {
return this.value;
}
}
// 实例化 Printer 类并调用 print 方法
let printer = new Printer("Hello, TypeScript!");
console.log(printer.print()); // 输出: Hello, TypeScript Generics!
// 实例化 LasterPrinter 类并调用 print 方法
let lasterPrinter = new LasterPrinter(666);
console.log(lasterPrinter.print()); // 输出: 666泛型类
泛型类(Generic class)允许你创建一个在类中使用泛型类型参数的类
class Animal<T> {
name: T
constructor(name: T){
this.name = name
}
action<T>(say: T) {
console.log(say)
}
}
let cat = new Animal<string>('Tom')
cat.action<string>("Hello, 我的名字叫"+cat.name+",喜欢吃鱼!");泛型的特点
代码复用和灵活性:可以编写更加通用、可重用的代码,减少重复工作。
类型安全:TypeScript 在编译时会进行类型检查,确保类型参数和实际使用的类型相匹配。
抽象数据类型的支持:支持定义通用的数据结构和算法,适用于不同类型的数据。
泛型是 TypeScript 的一个强大特性,它允许你编写更灵活、更可重用的代码。通过使用泛型,你可以创建出适用于多种类型的组件,而不需要牺牲类型安全。