这是我遇到过几次的情况,看起来应该相当简单,但是我找不到不将类型设置为 any 的解决方案
函数将两个不同对象之一作为参数,检查接收到的对象,并返回相应的字段。
这是问题的简化版本,但问题是这两个对象只能通过它们的属性(没有重叠)来区分,而我无法访问任何属性,因为它们不存在于另一个类型。
type Obj1 = {
message: string
}
type Obj2 = {
text: string
}
const getText = (obj: Obj1 |obj2): string => {
if (obj.message) {
return obj.message
}
return obj.text
}
Run Code Online (Sandbox Code Playgroud)
Mur*_*göz 66
你必须缩小类型。您可以通过使用in运算符来执行此操作。
const getText = (obj: Obj1 | Obj2): string => {
if ("message" in obj) {
return obj.message
}
return obj.text
}
Run Code Online (Sandbox Code Playgroud)
Nse*_*ens 13
您可以将对象强制转换为Obj1或Obj2:
type Obj1 = {
message: string
}
type Obj2 = {
text: string
}
const getText = (obj: Obj1 | Obj2): string => {
if ((obj as Obj1).message) {
return (obj as Obj1).message
}
return (obj as Obj2).text
}
Run Code Online (Sandbox Code Playgroud)
根据题主的提问,这个问题的真正答案是这样的
\n但有时您可能会your defined type以primitive type这种方式使用上述解决方案,因为我面临的问题\n情况如下
type Obj1 = {\n message: string\n}\n\nconst getText = (obj: Obj1 |string): string => {\n if (obj.message) {\n return obj.message\n }\n\n return obj.text\n}\nRun Code Online (Sandbox Code Playgroud)\n因此,在这种情况下,上述解决方案并不适合您,因此您可能需要使用typeof\xe2\x9c\x8c\xef\xb8\x8f
const getText = (obj: Obj1 | string): string => {\n if (typeof obj !== \'string\') {\n return obj.message\n }\n\n return obj.text\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
9372 次 |
| 最近记录: |