Lingua-e
JavaScript

¿Qué significa TS2540: Violación de readonly?

← Errores

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

JavaScript

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