Extrahera den första token från en "eller-lista" (union) i Typescript
Jag vill ha en generisk typ som nedan F som om:
type X = F<'a'|'b'|'c'>
då bör X vara 'a'.
Och om
type X = F<'alpha'|'beta'|'gamma'|'delta'>
då bör X vara 'alpha'.
Följande sätt fungerar inte:
type F<T> = T extends (infer FirstToken | any) ? FirstToken : T
Testa det här.
Svar #1
I TS kan du inte direkt extrahera den första typen från strängliteraltyper eftersom den inte är i sekvens - till skillnad från en array eller en tuple.
Det första konceptet i unionen finns inte i språket.
Du kan däremot använda distributiva villkorstyper som används på ett sätt som liknar att extrahera den "första" typen från en union.
Men det är viktigt att förstå att detta beteende är ett resultat av hur TS hanterar villkorliga typer, och det är inte garanterat att det alltid fungerar som du kanske förväntar dig.
Test här