微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeScript:为什么我不能访问仅在一个对象上定义的联合类型上的属性?

如何解决TypeScript:为什么我不能访问仅在一个对象上定义的联合类型上的属性?

我想要一个属性a 的对象,它是一个数字,或者一个属性b 的对象,它是一个字符串。在普通 JavaScript 中,如果其他对象已通过,则变量 test 将是一个数字或未定义。为什么这是 TypeScript 中的错误?或者有没有办法在没有类型保护的情况下做到这一点?

function t(aOrB: {a:number} | {b:string}){
    const test: number | undefined = aOrB.a
}

https://www.typescriptlang.org/play?#code/FAMwrgdgxgLglgewgAhgCgIYHkBOAhALmQG8MCIwBbAIwFMcBfZAHxOoIGcYc4IBzBgEpiwZGORQkXVLS5EKNei2SQAJrRC9aq5AF5k2fADoMwBsCA

解决方法

您需要在返回前检查 WITH child (id,child_id) AS ( SELECT id,child_id,0 AS level FROM my_table UNION ALL SELECT e.id,e.child_id,level + 1 FROM my_table e JOIN child s ON e.id = s.child_id ) SELECT m.id,s.child_id FROM child s JOIN my_table m ON s.id = m.child_id; if ('a' in aOrB)

,

你可以像这样使用typeOf

function t(aOrB:any){
const test =((typeof(aOrB) == "object")?aOrB.a:aOrB);

console.log(test);
}
t({a:123});
t(123)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。