gpt4 book ai didi

javascript - Flow - 对象可能为空,但在构造函数中明确定义

转载 作者:行者123 更新时间:2023-11-30 09:23:11 25 4
gpt4 key购买 nike

我有如下内容:

// @flow

type MyObject = {
a: number,
b: number
};

class MyComponent extends Component {
myObject: ?MyObject = null; // null on init
constructor() {
super();

this.myObject = {
a: 1,
b: 2
};
}

render() {
return <h1>{this.myObject.a}</h1>;
}
}

这会在 this.myObject.a 上返回一个流程错误,指出:

Cannot get this.myObject.a because property "a" is missing in null or undefined [1].

显然我可以检查一下 this.myObject 是否是一个对象,但是在当前版本的流(0.72.0)中有没有办法,所以我没有做这些基本上是多余的检查?

我知道我的要求可能过高,但我只是想听听您对如何最好地完成这项工作的看法。

最佳答案

就用

myObject: MyObject;

不是

myObject: ?MyObject = null;

如果我们对类字段初始值设定项进行脱糖处理,您的代码最终基本上看起来像这样:

class MyComponent extends Component {
constructor() {
super();

this.myObject = null;
this.myObject = {
a: 1,
b: 2
};
}
//...
}
}

...因为实例字段是在构造函数的开头初始化的(在调用 super 之后,在子类中;在顶级类的最开始)。 (详细信息在 the proposal 中,特别是建议的规范文本 here [子类] 和 here [基类]。)

因此不需要类型上的初始 null?。删除它们可以解决问题。

关于javascript - Flow - 对象可能为空,但在构造函数中明确定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50407454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com