interface Person {
firstName: string;
}
interface PersonWithAge extends Person {
age: number
}
type AnyPerson = Person | PersonWithAge;
let user: AnyPerson = {
firstName: "Malcolm"
};
user.age = 25;
我收到以下错误:
“类型'人员'不存在属性'年龄'。”
为什么不允许这样做?实现此目标的正确方法是什么?
答案 0 :(得分:2)
您只能访问工会所有组成部分共有的成员。在这种情况下,age
仅在PersonWithAge
中,因此user.age
不是有效的访问权限(因为如果user
是Person
则没有age
)。
您可以使用in
类型的防护将联合范围缩小到PersonWithAge
:
interface Person {
name: string
}
interface PersonWithAge extends Person {
age: number;
}
type AnyPerson = Person | PersonWithAge;
declare var user: AnyPerson;
if('age' in user ) {
user.age // user is PersonWithAge so this is ok now
}