Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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 as zmienia nazwę klucza. Tak typ mapowany tworzy nazwy, których nie było na wejściu.

    • Filtered<User>
      →{ name: string; }

      Zmiana nazwy klucza na never usuwa 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 never jako *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 zachowuje readonly oraz ?; dodaj klauzulę as albo 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.