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: stringw 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.

