我想知道是否可以使用catch all创建一个不相交的联合类型。 我的想法是,如果说对象'键入'字段是一定的值然后我知道我将有更多的数据。
我认为它看起来像这样:
type MyObject =
| { type: 'extra_details', moreDetails: {here: 'it is'} }
| { type: string }
谢谢!
答案 0 :(得分:1)
在文档中有一章关于标记的联合。 https://flowtype.org/docs/dynamic-type-tests.html#tagged-unions
但支票如
function foo(x: MyObject) {
if (x.type === 'extra_details') {
// ...extra details code-path
}
}
不足以证明流在此代码路径中,x
只能是extraDetails类型。该检查满足两种类型的联合。 {type: string}
是{type: 'extra_details'}
的更一般情况。但是,您可以检查是否存在额外的字段。
if (x.moreDetails) {
}