流中的属性缺失为空或未定义

时间:2019-05-05 06:08:43

标签: reactjs flowtype

我将Flow与React一起使用,并且我有一个使用State和Props类型的类,如下所示:

type B = {x:number}

type State = {
  a: ?B
};

type Props = {}

class MyClass extends React.PureComponent<Props, State> {
  constructor(props: Props) {
    super(props);
    this.state = {
      a: null,
    };
  }
...
myFunction=()=>{

console.log(this.state.a.x)// Flow error here

}

}

流错误为:无法获取this.state.a.x,因为属性x在未定义中丢失。我的类型定义有什么问题?为什么要在构造函数(props:Props){}中使用'Props'类型定义?

1 个答案:

答案 0 :(得分:1)

?B表示a属性与B | null | void相同。由于您可以执行null.xundefined.x,因此Flow会抛出一个有效的异常。为了使您的代码正常工作,您可以例如更改

console.log(this.state.a.x);

成为

console.log(this.state.a ? this.state.a.x : null);

如果未将a设置为B值,它将记录null

或者,您可以将类型设为a: B,但是您需要具有一个B值才能将状态作为初始值,听起来好像您没有该值,因为您的示例状态设置为a: null