Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Operatory

    as const

    Powstrzymuje kompilator przed poszerzeniem literału do jego typu ogólnego.

    Czym jest

    Domyślnie const x = 1 to 1, ale { a: 1 } ma a: number, bo właściwości obiektu są mutowalne, a mutowalne miejsce nie obieca, że zostanie 1. as const mówi, że nic tu nie zostanie nadpisane, więc typy literalne można zachować, a tablice stają się krotkami tylko do odczytu. To wejście do niemal każdej typowej sztuczki startującej z prawdziwych danych.

    Przykłady

    • typeof plain
      →{ kind: string; sides: number; }
    • typeof frozen
      →{ readonly kind: "circle"; readonly sides: 0; }

      Każda właściwość staje się readonly, a każda wartość zachowuje swój typ literalny.

    • typeof tuple
      →readonly [1, 2]

      Tablica staje się krotką tylko do odczytu — tak literalna tablica dociera na poziom typów z nienaruszoną długością.

    Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.

    Czego nie robi

    • Nic nie zamraża w czasie wykonania. Robi to Object.freeze; as const jest wymazywane, a obiekt jest tak samo mutowalny jak był.
    • Nie przenika przez wywołania funkcji. as const dotyczy literału, który napisałeś, a nie tego, co zwraca funkcja.

    Wniosek

    Jeśli typowa sztuczka „nie działa na moich danych”, sprawdź, czy dane się nie poszerzyły. as const jest odpowiedzią zaskakująco często.