泛型参数也可以继承
比方说想通过属性名从对象里获取属性值,要确保这个属性存在于对象上,可以对泛型加以约束。
function getProperty<T, K extends keyof T>(o: T, k: K) {
return o[k]
}
class Foo {
a: number;
constructor() {
this.a = 1
}
}
class Bar extends Foo {
b: number;
constructor() {
super()
this.b = 2
}
}
const bar = new Bar()
getProperty(bar, 'a')
getProperty(bar, 'b')
getProperty(bar, 'c') // 报错