我输入了名为Entry
的内容,即:
export type Entry = {
number: number
position: number
entryItem: Banana | Orange
}
然后我将 EntryItem 类型定义为:
香蕉型
export type Banana = {
number: number
bananaTitle: string
}
苹果型
export type Apple = {
number: number
appleTitle: string
}
现在,如果我做类似的事情:
entry.entryItem.bananaTitle
我收到错误:“‘Banana | Apple’类型上不存在属性‘bananaTitle’”
同样,如果我这样做:
entry.entryItem.appleTitle
我收到错误:“属性‘appleTitle’在类型‘Banana | Apple’上不存在”
据我所知,运算符|
将允许我创建一个可以“智能”理解我指的是Banana
还是Apple的类型
当我做类似 entry.entryItem.UNIQUE_PROPERTY_OF_BANANA_OR_APPLE
我错过了什么?
最佳答案
编译器不是魔术师。属性 entryItem
可能是 Banana
或 Apple
。由于我们处于编译级别,因此您必须告诉编译器当前对象是什么。有不同的方法。其中之一是使用 in
运算符,例如
function test(entry: Entry) {
if ("appleTitle" in entry.entryItem) {
entry.entryItem.appleTitle; // it's an apple
} else {
entry.entryItem.bananaTitle; // it's a banana
}
}
关于typescript - 联合类型 - 允许不同的子类型 |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875894/