Skip to content

泛型类

类,和接口一样,可以是泛型的。当一个泛型类用new实例化时,其类型参数的推断方式与函数调用的方式相同。

typescript
class Box<Type> { 
  contents: Type; 
  constructor(value: Type) { 
    this.contents = value; 
  } 
}

// const b: Box<string> 
const b = new Box("hello!");

类可以像接口一样使用通用约束和默认值。

  • 静态成员中的类型参数

这段代码是不合法的,可能并不明显,为什么呢?

typescript
class Box<Type> { 
  // 静态成员不能引用类的类型参数。 
  static defaultValue: Type; 
}

// Box<string>.defaultValue = 'hello' 
// console.log(Box<number>.defaultValue)

请记住,类型总是被完全擦除的! 在运行时,只有一个Box.defaultValue属性。这意味着设置 Box.defaultValue(如果有可能的话)也会改变Box.defaultValue,这可不是什么好事。一个泛型类的静态成员永远不能引用该类的类型参数