Typescript:Omit <T,K>不适用于枚举

时间:2019-10-21 11:37:43

标签: javascript typescript

我有一个这样的枚举和接口

enum MyEnum {
    ALL, OTHER
}

interface Props {
    sources: Omit<MyEnum, MyEnum.ALL>
}

const test: Props = { sources: MyEnum.ALL } // should complain

为什么它不省略MyEnum.All?我正在使用打字稿3.6.4

2 个答案:

答案 0 :(得分:2)

Omit将忽略界面中的键。但是枚举是不同的。

Imo最好的枚举比较是该枚举类型的实例的并集。像type MyEnum = MyEnum.All | MyEnum.OTHER

因此,您不想忽略,而是从联合类型中排除类型:

enum MyEnum {
    ALL, OTHER, SOME, MORE
}

interface Props {
    sources: Exclude<MyEnum, MyEnum.ALL | MyEnum.SOME>
}

const test: Props = { sources: MyEnum.ALL } // does complain now

答案 1 :(得分:1)

我认为您正在寻找Exclude实用程序类型:

 sources: Exclude<MyEnum, MyEnum.ALL>