过滤联盟类型为单型
问题描述:
我有一个标签联合类型定义,并且有在我的代码,我想筛选到一个单一类型的位置。过滤联盟类型为单型
/* @flow */
type AbstractChange = {
base: string,
};
type CreateChange = AbstractChange & {
kind: 'create',
createField: string,
};
type UpdateChange = AbstractChange & {
kind: 'update',
updateField: string,
};
type Change = CreateChange | UpdateChange;
function test(changes: Change[]) {
let creates: CreateChange[] = changes.filter(c => c.kind === 'create');
return creates;
}
遗憾的是,似乎没有被允许,我得到的错误:
19: function test(changes: Change[]) {
^intersection. This type is incompatible with 7:
type CreateChange = AbstractChange & {
^object type
Here's一试流链路是否有帮助。
答
filter
是不是足够聪明,明白这样的细化,但它也许明白类型
function maybeCreateChange(c: Change): ?CreateChange {
return c.kind === 'create' ? c : null
}
function test(changes: Change[]): CreateChange[] {
return changes.map(maybeCreateChange).filter(Boolean)
}