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>
