Javascript 如何检查对象是否为流类型的实例?

Javascript 如何检查对象是否为流类型的实例?,javascript,flowtype,Javascript,Flowtype,我设置了两种流类型: type Form1Fields = { fieldA } type Form2Fields = { fieldZ } type FormFields = Form1Fields | Form2Fields 然后是一个函数,它接受一个FormFields对象作为参数: const myFunction = (fields: FormFields) => return fields.fieldA; 这给了我一个错误无法获取fields.field

我设置了两种流类型:

type Form1Fields = {
    fieldA
}

type Form2Fields = {
    fieldZ
}

type FormFields = Form1Fields | Form2Fields
然后是一个函数,它接受一个
FormFields
对象作为参数:

const myFunction = (fields: FormFields) => return fields.fieldA;
这给了我一个错误
无法获取fields.fieldA,因为Form2Fields上缺少属性fieldA

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

因此,在
myFunction
中,我需要执行以下操作:

if (typeof fields === Form1Fields) { ... }
else { ... }
我可以用诸如
number
之类的基本类型来实现这一点,但我似乎不能用流类型来实现这一点

有没有一种方法可以将一个对象与流类型进行比较,或者有没有另一种方法可以解决这个问题?

啊,答案是。通过向“标识”该类型的类型添加字段,我可以在
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;

我不确定flowtype如何表示引擎盖下的类型。您是否尝试过
if(fields instanceof Form1Fields){
typeof
只会给您
对象