typescript - Hvordan definere en type som er typen av å ekskludere 'a' fra string?


Jeg vil definere en type som dette:

type Response = {
   type: 'a',
   value: string
} | {
   type: ???, // any other string except 'a'
   value: number
}

Er det mulig?

Jeg prøvde:

type OtherStrings = Exclude<string, 'a'>

Men som ikke fungerer som jeg forventet.

Svar #1

Jeg antar at ingenting bedre enn dette er mulig

type OtherStrings<T> = T extends 'a' ? never : string

const OtherStrings: OtherStrings<'b'> = 'b'
const OtherStrings: OtherStrings<'a'> = 'a' // err

PS. I stedet for slike halvhjertede løsninger som dette, bør du eksplisitt liste opp alle mulige strengalternativer som du ønsker å tillate eller ikke tillate.