首页 > 编程笔记 > JavaScript笔记 阅读:6

TypeScript泛型类的用法(附带实例)

如果在定义类时,类中定义的属性、类中方法的参数或返回值是不确定的,就可以使用泛型类,并且具有泛型类型的属性可以没有属性值,具有泛型类型的方法可以没有方法体。

现在我们想要实现这样的类,包含一个初始值 initValue 属性,但该属性值的类型是不确定的,还包含一个 add() 方法,其接收的两个参数和返回值是不确定的,但它们都与 initValue 属性值的类型是一致的。

此时就可以使用泛型类来定义:
// 定义类,指定泛型类型
class GenericData<T> {
  // 在类体中使用泛型类型
  initValue: T;
  add: (x: T, y: T) => T;
}
在类名右侧通过 <T> 来定义泛型类,类的实例属性 initValue、add() 方法的形参和返回值都引用了泛型类型 T。

接下来可以创建泛型类的实例,在类名右侧指定具体类型,随后指定实例的 initValue 属性和 add() 方法。如果指定的具体类型是 number,那么 initValue 属性值和 add() 方法接收的参数和返回值都必须是 number 类型的。同理,如果指定的具体类型是 string,那么 initValue 属性值和 add() 方法接收的参数和返回值都必须是 string 类型的。
// 在创建实例时指定泛型具体类型
const gNumber = new GenericData<number>();
gNumber.initValue = 4;
gNumber.add = function (a, b) {
  return a + b;
};
console.log(gNumber.add(gNumber.initValue, 5));

const gString = new GenericData<string>();
gString.initValue = 'abc';
gString.add = function (a, b) {
  return a + b;
};
console.log(gString.add(gString.initValue, 'cba'));

相关文章