Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS2540

    Propiedad de solo lectura

    Cannot assign to 'x' because it is a read-only property.

    Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.

    La propiedad está marcada como `readonly`, que es una promesa en tiempo de compilación de no reasignarla — y nada más.

    Reproducción

    const point: { readonly x: number } = { x: 1 }
    
    point.x = 2

    La compilación afirma que esto emite exactamente este código.

    Por qué lo dice el compilador

    `readonly` se borra en tiempo de ejecución. Detiene las asignaciones que el compilador ve, y nada más — el mismo objeto entregado a JavaScript, o alcanzado por un alias sin `readonly` del mismo tipo, es completamente mutable. Documenta la intención y atrapa los errores honestos, lo cual vale mucho y no es lo mismo que estar congelado.

    Arreglos

    1. 01
      const point: { x: number } = { x: 1 }
      
      point.x = 2

      Quita el modificador si el valor de verdad debe cambiar. `readonly` sobre algo que mutas es un comentario que miente.

    2. 02
      const point: { readonly x: number } = { x: 1 }
      
      const moved: { readonly x: number } = { ...point, x: 2 }

      O construye uno nuevo. Es lo que `readonly` te está pidiendo, y por eso vale la pena mantener el modificador: el valor antiguo sigue siendo válido para quien aún lo tenga.

    Conclusión

    `readonly` es una nota para otros programadores que el compilador resulta imponer. No es `Object.freeze`, y nunca llega al tiempo de ejecución.

    Adónde ir después

    Errores