Rozwiązanie z komentarzem
Opublikowano 4 sierpnia 2026Rozwiązanie
type MyReadonly<T> = { readonly [K in keyof T]: T[K] }
Najczęstsza błędna odpowiedź
type MyReadonly<T> = { [K in keyof T]: Readonly<T[K]> }
To stosuje `Readonly` do każdej *wartości*, a nie do mapowania. Dla prymitywu takiego jak `string` nie robi to nic, więc klucze pozostają modyfikowalne, a wynik jest po prostu kopią `T`.
Linia po linii
readonly [K in keyof T]Modyfikator poprzedza klauzulę klucza, tak jak napisałbyś `readonly host: string` w interfejsie. Oznacza właściwość, a nie typ jej wartości.
T[K]Wartość przechodzi nietknięta, co utrzymuje płytkość. Rekurencja w tym miejscu to dokładnie sposób budowy `DeepReadonly`.
Do zapamiętania
Modyfikatory działają na właściwościach; owinięcie typu wartości to zupełnie inna operacja. Pomylenie ich daje typ, który wygląda dobrze i niczego nie egzekwuje.