TS2542
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
readonlysi 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.

