Typescript可选对象属性只能与void联合一起使用?

时间:2018-06-29 19:20:14

标签: typescript types typescript2.0

我已经使用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是否存在

有人可以向我解释为什么这行得通吗?这是对的吗?为什么 ?无法在对象属性类型上正常工作?

0 个答案:

没有答案