[英]FlowJS: How to use union types and boolean literals
流程问题似乎没有多少答案,但是可以这样:
type Base = {
foo: string,
bar: string
}
type Derived1 = Base & {
conditional: false
}
type Derived2 = Base & {
conditional: true,
baz: string
}
type One = {
foo: string,
bar: string,
conditional: boolean
}
type Two = One & {
baz: string
}
type Return1 = Derived1 | Derived2 // fails
type Return2 = One | Two // works, but not desired
function test(conditional: boolean): Return1 {
return {
foo: "foo",
bar: "bar",
conditional,
...conditional ? {baz: "baz"} : {}
}
}
test
的返回值最好是Derived*
类型之一( Return1
而不是Return2
),其中conditional
属性是布尔文字。
这样做的目的是让流程理解,如果conditional
为true
,那么对象test
返回的结果必须包含baz
,反之亦然。
这不可能吗?
Flow不够智能,无法为您解决。 您必须执行以下操作:
function test(conditional: boolean): Return1 {
const base = {
foo: "foo",
bar: "bar",
}
if (!conditional) {
return Object.assign({}, base, { conditional });
} else {
const result: Derived2 = Object.assign({}, base, { conditional }, {baz: "baz"});
return result;
}
}
此处了解更多信息: https : //flow.org/blog/2016/07/01/New-Unions-Intersections/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.