我已经使用Typescript一段时间了,只是遇到了这种有趣的行为。我想在类型安全的接口上创建一个可选的对象属性。我尝试的第一种方法是:
type StrNumDict = {
[key: string]: number;
};
interface Bar {
bar: string;
foo?: StrNumDict;
}
const y: Bar = {
bar: 'xxx'
}
console.log(y.foo.x);
问题是打字脚本编译器在执行console.log(y.foo.x);
时不会引发错误(因为x可能是未定义的)
所以我玩了一遍,做了以下事情(我需要输入此内容,以便不能使用object
):
interface Bar {
bar: string;
foo?: void | StrNumDict;
}
console.log(y.foo.x);
由于'x' does not exist on type 'void | StrNumDict'
,Typescript会正确引发错误,我必须检查x
是否存在
有人可以向我解释为什么这行得通吗?这是对的吗?为什么 ?无法在对象属性类型上正常工作?