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
readonlyy 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 6.0.3, no se escribió a mano.
Lo que no hace
- No congela nada en tiempo de ejecución. Eso lo hace
Object.freeze;as constse borra y el objeto sigue siendo tan mutable como era. - No atraviesa llamadas a función.
as constse 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.

