gpt4 book ai didi

javascript - 如何检查对象是否是 Flow 类型的实例?

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

我设置了两种流程类型:

type Form1Fields = {
fieldA
}

type Form2Fields = {
fieldZ
}

type FormFields = Form1Fields | Form2Fields

然后我的函数接受一个 FormFields 对象作为参数:

const myFunction = (fields: FormFields) => return fields.fieldA;

这给我错误 Cannot get fields.fieldA because property fieldA is missing on Form2Fields

我明白它在说什么。根据Flow docs ,“当调用接受联合类型的函数时,我们必须传入其中一种类型。但是在我们的函数内部,我们需要处理所有可能的类型。”

所以在 myFunction 中,我需要做如下事情:

if (typeof fields === Form1Fields) { ... }
else { ... }

我可以用 number 这样的基本类型来做到这一点,但我似乎不能用 Flow 类型来做到这一点。

有没有办法将对象与 Flow 类型进行比较,或者是否有解决此问题的不同方法?

最佳答案

啊,答案是Disjoint Unions .通过向“标识”该类型的类型添加一个字段,我可以在 myFunction 中检查它。

type Form1Fields = {
type: 'Form1Fields',
fieldA: string
}

type Form2Fields = {
type: 'Form2Fields',
fieldZ: string
}

type FormFields = Form1Fields | Form2Fields

const myFunction = (fields: FormFields) => return fields.type === 'Form1Fields' ? fields.fieldA : fields.fieldZ;

关于javascript - 如何检查对象是否是 Flow 类型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422094/

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