Rozwiązanie z komentarzem
Opublikowano 9 września 2026Rozwiązanie
type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: K }Najczęstsza błędna odpowiedź
type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: T[K] }Połowa zamiany. Klucz dostaje nazwę starej wartości, co jest słuszne, a potem wartością również staje się stara wartość — powstaje { x: "x" }, podczas gdy sprawdzenie chce { x: "a" }. Zmiana nazwy klucza nie przenosi starego klucza nigdzie; jeśli go chcesz, musisz sam wstawić go w klauzuli wartości.
Linia po linii
as T[K]Nowym kluczem jest stara wartość.
asprzyjmuje dowolne wyrażenie dające typ klucza, a dostęp indeksowany takim jest.: KA nową wartością jest stary klucz, wciąż w zasięgu, wciąż literał. Obie klauzule są niezależne — i to właśnie pozwala na czystą zamianę w jednej linii.
Do zapamiętania
Typ mapowany podejmuje na każdy klucz dwie osobne decyzje: jak się nazywa i co przechowuje. Większość błędów w typach mapowanych to jedna z tych odpowiedzi przypadkiem użyta w miejscu drugiej.

