type MyPick<T, K extendskeyof T> = { [P in K]: T[P] }
Najczęstsza błędna odpowiedź
type MyPick<T, K extendskeyof T> = { [P inkeyof T]: T[P] }
Mapowanie po `keyof T` kopiuje cały obiekt — `K` nigdy nie jest brane pod uwagę. Wyrażenie po `in` to zbiór kluczy, który budujesz, a nie ten, z którego czytasz.
Linia po linii
{ [P in K]: ... }
`K` to unia kluczy literalnych. Typ mapowany rozdziela się po tej unii, tworząc jedną właściwość na każdy element.
T[P]
Dostęp indeksowany. Ponieważ `K extends keyof T`, `P` jest zawsze prawdziwym kluczem `T`, więc typ nigdy nie rozszerza się do `unknown`.
Do zapamiętania
Typ mapowany czyta się jako `{ [Nazwa in ZbiórKluczy]: TypWartości }`. Wszystko dalej w tej ścieżce to wariacja na ten temat.