Saltar al contenido
webtype.orgas const

    ↑↓ mover · ⏎ abrir · esc cerrar

    Operadores

    as const

    Impide que el compilador ensanche un literal a su tipo general.

    Qué es

    Por defecto `const x = 1` es `1`, pero `{ a: 1 }` tiene `a: number`, porque las propiedades de objeto son mutables y un hueco mutable no puede prometer seguir siendo `1`. `as const` dice que aquí nada será reasignado, así que los tipos literales se conservan y los arrays pasan a ser tuplas de solo lectura. Es la puerta de entrada a casi todo truco a nivel de tipos que parte de datos reales.

    Ejemplos

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

      Cada propiedad pasa a ser `readonly` y cada valor conserva su tipo literal.

    • typeof tuple
      readonly [1, 2]

      Un array se convierte en una tupla de solo lectura, que es como un array literal llega al nivel de tipos con su longitud intacta.

    Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.

    Lo que no hace

    • No congela nada en tiempo de ejecución. Eso lo hace `Object.freeze`; `as const` se borra y el objeto sigue siendo tan mutable como era.
    • No atraviesa llamadas a función. `as const` se aplica al literal que escribiste, no a lo que devuelva una función.

    Conclusión

    Si un truco a nivel de tipos «no funciona con mis datos», comprueba si los datos se ensancharon. `as const` es la respuesta sorprendentemente a menudo.