Przejdź do treści
webtype.orgas const

    ↑↓ 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 5.9.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.