Wzorce
Jak sprawić, by pomocnik wywnioskował literalną krotkę bez wymagania od wywołujących `as const`?
Oznacz parametr typu jako `const`; inferencja wybierze wtedy readonly literalne kształty zamiast poszerzonych tablic i prymitywów.
Przepis
function tuple<const T extends readonly unknown[]>(...values: T): T { return values } const statuses = tuple('idle', 'loading', 'done') const point = tuple(10, 20)
Build to kompiluje i sprawdza każdy wynik poniżej.
Jak to działa
- 01
const T extends readonly unknown[]
`const` zmienia preferencję inferencji, a ograniczenie readonly dostarcza zgodny wąski cel.
- 02
...values: T
Parametr resztowy zapisuje każdy argument jako osobną pozycję krotki.
Co dostajesz
typeof statuses→readonly ["idle", "loading", "done"](typeof statuses)[number]
→"idle" | "loading" | "done"typeof point→readonly [10, 20]
Gdzie to zawodzi
Inferencja const jest płytka i oparta na preferencji. Wartości zapisane już w poszerzonych zmiennych pozostają poszerzone, a mutowalne ograniczenia mogą zmusić kompilator do powrotu do mutowalnych tablic.
Wniosek
Używaj parametrów typu const na granicach API, gdzie wywołującym przydaje się precyzja literałów bez dodatkowej składni.
