我设置了两种流类型:
type Form1Fields = {
fieldA
}
type Form2Fields = {
fieldZ
}
type FormFields = Form1Fields | Form2Fields
然后我接受一个FormFields
对象作为参数的I函数:
const myFunction = (fields: FormFields) => return fields.fieldA;
这给了我错误Cannot get fields.fieldA because property fieldA is missing on Form2Fields
。
我明白了。根据{{3}},“在调用接受联合类型的函数时,我们必须传递这些类型中的一种。但是在函数内部,我们必须处理所有可能的类型 。”
所以在myFunction
中,我需要做类似的事情:
if (typeof fields === Form1Fields) { ... }
else { ... }
我可以使用诸如number
之类的原始类型来做到这一点,但是似乎我不能使用Flow类型来做到这一点。
有没有一种方法可以将对象与Flow类型进行比较,或者有其他方法可以解决此问题?
答案 0 :(得分:0)
啊,答案是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;