我将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'类型定义?
答案 0 :(得分:1)
?B
表示a
属性与B | null | void
相同。由于您可以执行null.x
或undefined.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
。