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
只会给您对象
。