交集不合并属性的枚举



我正在尝试在Typescript v2.9.1中创建一个交集类型,其中两种类型都具有给定的属性,但类型不同:const newItems: A[] & B[] = [];

给定以下接口:

export interface A {
category: EnumA;
}
export interface B {
category: EnumB;
}
export enum EnumA {
bar
}
export enum EnumB {
foo
}

EnumAEnumB具有与之关联的不同值,我希望了解集合中的所有这些值。

但是,如果我尝试执行类似过滤器的操作:const filteredItems = newItems.filter(i => i.category !== EnumB.foo);

我收到一个语法错误,指出Operator '!==' cannot be applied to types 'A' and 'EnumB.foo'并且i.category的类型在智能感知中列为EnumA

我希望打字稿了解要EnumA & EnumBi.category的类型。这是一个错误还是我有不合理的期望?

似乎你不需要数组的交集(A[] & B[],正如你所写的(,因为它意味着"这必须具有Array<A>的所有属性,然后是Array<B>的所有属性,这之前没有在这里列出"。而且由于属性集是相同的(它们只是类型不同(,因此它们都取自Array<A>.

如果您按如下方式编写,则使用的代码将编译:

const newItems: (A & B)[] = [];
const filteredItems = newItems.filter(i => i.category !== EnumB.foo);

从现在开始,newItems被键入为"事物数组,每个事物既AB"。它们的category性质是enum的,即只是object,因此可以合并。然后,我们将把它作为enumA & enumB.

最新更新