gpt4 book ai didi

flowtype - 使用 Flow 输入具有默认属性的对象

转载 作者:行者123 更新时间:2023-12-02 21:54:19 24 4
gpt4 key购买 nike

我对如何使用 Flow 键入具有默认属性的对象有点困惑。

例如,我有一个函数,它接受具有默认属性的对象,如下所示:

function load({ p = 1, pp = 5 }: Payload) {
return {
p,
pp
};
}

如果我像这样定义有效负载的类型:

type Payload = {
p: ?number,
pp: ?number
}

Flow 会提示(显然,因为对象的字段不再可为空)。请参阅 Try Flow 上的示例

如果我重新定义 Payload,使其字段不再可为空,Flow 会很高兴;但这当然会使实际使用默认属性变得不可能,如下面的示例所示:

type Payload = {
p: number,
pp: number
}

function load({ p = 1, pp = 5 }: Payload) {
return {
p,
pp
};
}

function test() {
let p = null;
let pp = 5
load({p, pp})
}

Try Flow 上的示例

在 Flow 中使用默认对象属性的正确方法是什么?

最佳答案

这看起来确实像一个错误。这似乎是与 null 处理相关的错误。我注意到,如果将 ppp 的类型联合限制为 number | void (其中 voidundefined 的类型),那么您的代码就可以工作:

type Payload = {
p: number | void,
pp: number | void
}

function load({ p = 1, pp = 5 }: Payload) {
return {
p,
pp
};
}

function test() {
let p /* undefined */
let pp = 5
load({p, pp})
}

但是如果你使用联合number | nullnumber |空 | void (这是 ?number 的扩展形式),那么您会得到相同的错误。

我的猜测是这与默认值在 Javascript 中的工作方式有关。如果该属性的值为undefined,则使用默认值。但如果属性值为null,则不使用默认值。因此,您可能无论如何都不想允许 null 值。

关于flowtype - 使用 Flow 输入具有默认属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361834/

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