Hva er forskjellen mellom string og string som er krysset med det tomme objektet i TypeScript
Bakgrunn
Jeg la merke til at Chakra UI bruker denne typen:
type ColorScheme = (string & {}) | "whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink" | "linkedin" | "facebook" | "messenger" | "whatsapp" | "twitter" | "telegram" | undefined
Min første tanke var at kanskje (string & {}) lurte autokomplettering til å fungere, noe som ser ut til å være korrekt basert på mine observasjoner:
// Has autocompletion
type Test = (string & {}) | "blue";
let x: Test = "blue"
// Doesn't have autocompletion
type Test2 = string | "blue";
let y: Test2 = "blue"
Lekeromlenke
Spørsmålet
Hvorfor i all verden er det en forskjell mellom string og (string & {})? Så vidt jeg forstår, representerer {}-typen hvilken som helst verdi unntatt null | undefined, så en streng er et delsett av det, og per definisjon, hvis A ⊂ B, så er A ∪ B=A, ikke sant? Kanskje jeg er gal, men denne oppførselen virker virkelig merkelig. Takk!