javascript - Typescript: Omit<T,K> fungerer ikke for enums


Jeg har en enum og et grensesnitt som dette

enum MyEnum {
    ALL, OTHER
}

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

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

Hvorfor utelater det ikke MyEnum.All? Jeg bruker TypeScript 3.6.4

Svar #1

`Omit` betyr å utelate nøkler fra et grensesnitt. Men enums er noe annet.

Etter min mening vil den beste sammenligningen av en enum være en union av forekomster av den enum-typen. Som type MyEnum=MyEnum.All | MyEnum.OTHER.

Så du vil ikke UTELATE nøkler, men ekskludere typer fra en unionstype:

enum MyEnum {
    ALL, OTHER, SOME, MORE
}

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

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

Svar #2

Jeg tror du leter etter Exclude-typen:

 sources: Exclude<MyEnum, MyEnum.ALL>

Relaterte artikler