Appearance
泛型类
类,和接口一样,可以是泛型的。当一个泛型类用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,这可不是什么好事。一个泛型类的静态成员永远不能引用该类的类型参数