typescript中的泛型

文章类型:TypeScript

发布者:admin

发布时间:2023-05-16

一:定义

1::允许我们在定义函数、类或接口时使用一个占位符类型,以便在使用时指定具体的类型参数。

2::使得代码更加灵活和可重用,可以增强类型的安全性和代码的可读性

二:常用

1:函数:使用了一个泛型类型参数 T,表示传入参数的类型和返回值的类型。通过指定类型参数或使用类型推断,可以使用这个函数并保持类型安全

function identity<T>(arg: T): T {
  return arg;
}

let result = identity<string>("Hello"); // 指定泛型类型为 string
console.log(result); // 输出: "Hello"

let anotherResult = identity(42); // 类型推断,泛型类型为 number
console.log(anotherResult); // 输出: 42

2:类:使用了一个泛型类型参数 T,表示存储的值的类型。通过指定类型参数,我们可以创建不同类型的实例,并保持类型安全

class Box<T> {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

let box = new Box<number>(42); // 指定泛型类型为 number
console.log(box.getValue()); // 输出: 42

let anotherBox = new Box<string>("Hello"); // 指定泛型类型为 string
console.log(anotherBox.getValue()); // 输出: "Hello"

3:接口:使用了两个泛型类型参数 T 和 U,表示了接口中两个属性的类型。通过指定类型参数,可以创建符合接口定义的对象,并保持类型安全

interface Pair<T, U> {
  first: T;
  second: U;
}

let pair: Pair<number, string> = { first: 42, second: "Hello" };
console.log(pair.first); // 输出: 42
console.log(pair.second); // 输出: "Hello"

三:总结

1:使用泛型,我们可以编写更通用、更健壮的代码,同时提供更好的类型检查和推断

2:增加代码的灵活性和可重用性