TS4104
TypeScriptERRORNotableDeclarationHIGH confidence

The type 'X' is 'readonly' and cannot be assigned to the mutable type 'X'.

Production Risk

Build will fail; resolve before shipping.

What this means

A declaration emit error (TS4104): The type 'X' is 'readonly' and cannot be assigned to the mutable type 'X'.. This diagnostic is emitted by the TypeScript compiler when the type 'X' is 'readonly' and cannot be assigned to the mutable type 'X'..

Why it happens
  1. 1Attempting to modify a property or variable declared as readonly
How to reproduce

TypeScript compiler reports TS4104 during type checking.

trigger — this will error
trigger — this will error
// Triggers TS4104
// The type 'X' is 'readonly' and cannot be assigned to the mutable type 'X'.

expected output

error TS4104: The type 'X' is 'readonly' and cannot be assigned to the mutable type 'X'.

Fix

Remove the readonly modifier or create a mutable copy

WHEN When you need to mutate a readonly property

Remove the readonly modifier or create a mutable copy
// Create a mutable copy
const mutable = { ...readonlyObject };
mutable.property = newValue;
// Or remove readonly from the type definition
type MyType = { property: string }; // not readonly

Why this works

readonly properties enforce immutability at the type level; create a copy to modify.

Sources
Official documentation ↗

TypeScript Compiler Diagnostics

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All TypeScript errors