Firma de índice de solo lectura
Index signature in type '{ readonly [k: string]: number; }' only permits reading.Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.
El objeto acepta cualquier clave de cadena, y todas ellas son de solo lectura. Es TS2540 aplicado a toda una familia de claves a la vez.
Reproducción
declare const ro: { readonly [k: string]: number } ro.x = 1
La compilación afirma que esto emite exactamente este código.
Por qué lo dice el compilador
Una firma de índice `readonly` es como describes una tabla de consulta que no debe editarse in situ — una configuración congelada, un mapa memoizado que entregas, el resultado de un mapeo que no quieres que se mute. El modificador se aplica a claves que aún no existen, y esa es la parte que sorprende: no hay clave que puedas inventar que sea escribible.
Arreglos
- 01
declare const ro: { [k: string]: number } ro.x = 1
Quita `readonly` si la tabla de verdad debe editarse.
- 02
declare const ro: { readonly [k: string]: number } const next: { readonly [k: string]: number } = { ...ro, x: 1 }
O espárcela en una nueva. El original sigue siendo válido para quien lo tenga, que es la razón por la que era `readonly`.
Conclusión
`readonly` en una firma de índice es una afirmación sobre todas las claves, presentes y futuras. Es la inmutabilidad más fuerte que ofrece el sistema de tipos, y aun así desaparece en tiempo de ejecución.