TL;使用联合类型时,DR TypeScript类型推理在类中失败
我在处理类和联合类型时遇到了一个typescript问题。
这是我得到的类型的基本版本:
type CommonData = {
name: string
}
type Dog = {
age: number
} & CommonData
type Bat = {
wingspan: number
} & CommonData
type Animal = {
type: "dog"
data: Dog
} | {
type: "bat"
data: Bat
}
Animal
类型根据type字段的值更改其数据类型。
因此,当使用Animal
类型创建对象时,typescript能够根据type字段确定每种动物使用的数据类型。
const bat: Animal = {
type: "bat",
data: {
name: "tim",
wingspan: 9000
}
}
// has type inference,
bat.data.name
但是,当在类中实现相同类型时,typescript无法识别返回的数据类型,下面是我当前代码的一个示例:
class AnimalClass {
animal: Animal
constructor (animal: Animal) {
this.animal = animal
}
}
const dog = new AnimalClass({
type: "dog",
data: {
name: "bob",
age: 10
}
})
// no type inference on data, typescript doesn't know that it's a Dog
dog.animal.data
dog.animal.data 的类型为Dog | Bat
。是否可以更改代码以推断dog.animal.data的类型为Dog
提前感谢:)
下面是完整的代码:打字机Playground
1条答案
按热度按时间ee7vknir1#
您可以在Animal类上使用泛型注解,如下所示,以完成推理:
Playground