打字稿对象可能未定义

时间:2019-08-18 19:42:23

标签: typescript

interface c {
    state?: {b: string}
}

const x: c = { state: {b: 'c'}}
console.log(x.state.b)

在上面的代码中,在接口c中,状态是一个可选属性。

但是,无论何时我想访问状态对象的属性b,只要设置它,这都会给我这个错误,对象可能是“未定义的”。解决此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

这是因为state可以是未定义的,并且编译器并不总是知道何时明确定义它。

您可以确定它已定义,只需使用:x.state!.b

答案 1 :(得分:1)

如果您确定可选字段(标有?的值),可以通过检查其值来实现:

if(x.state !== undefined){
  console.log(x.state.b)
}

您可以使用!将其标记为存在:

console.log(x.state!.b)