TypeScript 接口

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 的一个强大特性,它允许你编写更灵活、更可重用的代码。通过使用泛型,你可以创建出适用于多种类型的组件,而不需要牺牲类型安全。