首页 > 解决方案 > 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

标签: javascripttypescriptunion-types

解决方案


您需要在返回之前if ('a' in aOrB)进行检查。if ('b' in aOrB)


推荐阅读