Konstrukcje
Mapped types
Pętla po unii kluczy budująca typ obiektu.
Czym jest
Czytaj { [K in Keys]: Value } jako: dla każdego K w tym zbiorze kluczy stwórz właściwość o nazwie K, której typem jest to wyrażenie. Dwie niezależne decyzje na klucz — jak się nazywa, przez opcjonalną klauzulę as, i co przechowuje. Partial, Required, Readonly, Pick i Record to każdy jedna linia tego.
Przykłady
Stringify<User>→{ id: string; name: string; }Prefixed<User>→{ getId: number; getName: string; }Klauzula
aszmienia nazwę klucza. Tak typ mapowany tworzy nazwy, których nie było na wejściu.Filtered<User>→{ name: string; }Zmiana nazwy klucza na
neverusuwa go. To jedyny sposób, w jaki typ mapowany może odrzucić właściwość.
Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.
Czego nie robi
- Nie potrafi usunąć klucza od strony wartości. Wyprodukowanie
neverjako *typu* właściwości zostawia klucz obecny i niewypełnialny, co nie jest tym samym co nieobecny. - Przestaje zachowywać modyfikatory w chwili, gdy zbiór kluczy jest obliczany.
[K in keyof T]jest homomorficzne i zachowujereadonlyoraz?; dodaj klauzulęasalbo połącz klucze unią, a znikną, chyba że dodasz je z powrotem.
Wniosek
Klucze rozstrzyga klauzula klucza, a wartości klauzula wartości. Większość błędów w typach mapowanych to jedna z tych odpowiedzi użyta przypadkiem zamiast drugiej.

