El error TS2540 de TypeScript se reporta cuando el código intenta asignar a una propiedad marcada como readonly. El modificador readonly hace que una propiedad sea inmutable después de la inicialización, proporcionando protección en tiempo de compilación contra mutaciones accidentales.
Por qué ocurre
- •Asignar directamente a una propiedad declarada con readonly.
- •Mutar una propiedad de un tipo Readonly<T> o ReadonlyArray<T>.
- •Intentar modificar un elemento de tupla más allá de su longitud declarada.
- •Intentar escribir en una propiedad de clase decorada con readonly fuera del constructor.
Ejemplos
Código que causa el error
interface Config {
readonly apiUrl: string;
}
const config: Config = { apiUrl: "https://api.example.com" };
config.apiUrl = "https://other.com";Error en la terminal
error TS2540: Cannot assign to 'apiUrl' because it is a read-only property.
Cómo solucionarlo
Trata los valores readonly como inmutables y crea nuevos objetos con los valores actualizados usando spread o structuredClone. Si la mutación es necesaria, elimina readonly de la interfaz. Usa as unknown as MutableType solo como último recurso y documenta el motivo.
Código corregido
interface Config {
readonly apiUrl: string;
}
const config: Config = { apiUrl: "https://api.example.com" };
// Create a new object instead of mutating
const updatedConfig: Config = { ...config, apiUrl: "https://other.com" };Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis