【发布时间】:2019-09-23 04:02:44
【问题描述】:
我是 Typescript 的新手,只是一个关于扩展类型形状的泛型类的问题,下面是一些示例代码:
class DataCollection<T extends { name: string }> {
...
}
这是有效的代码,似乎一个类可以扩展一个类型,但事实并非如此,如果我们这样编码:
type Person = {
name: string
}
class DataCollection extends Person { // invalid code
...
}
它是无效的,所以类不能扩展一个尖锐的类型。
而我们只能把类型Person当作接口和代码这样处理:
type Person = {
name: string
}
class DataCollection implements Person { //valid code
...
}
这意味着,使用泛型类更明智:
class DataCollection<T implements { name: string }> {
...
}
那么为什么泛型类只能扩展类型形状而不能实现类型形状?
【问题讨论】:
-
你在这里混合了一些概念。
T extends { name: string }是泛型类型参数约束。它要求T具有name类型为string的属性。例如。new DataCollection<Person>()有效,但new DataCollection<{ foo: boolean }>()无效。 typescriptlang.org/docs/handbook/… -
@AlekseyL。那么为什么我们必须使用“扩展”而不是“实现”
-
再一次,你在混合不相关的东西。
class DataCollection<T extends { name: string }>(泛型类型约束)与class DataCollection extends Person(继承)无关
标签: typescript