Readonly class properties let you create values that cannot be changed after they are set. This helps keep your data safe and predictable.
Readonly class properties in Typescript
class ClassName { readonly propertyName: Type; constructor(value: Type) { this.propertyName = value; } }
The readonly keyword makes the property unchangeable after assignment.
You can only set a readonly property when you declare it or inside the constructor.
make that is set when a new Car is created.class Car { readonly make: string; constructor(make: string) { this.make = make; } }
class Point { readonly x: number = 0; readonly y: number = 0; }
id is readonly but name can be changed later.class User { readonly id: number; name: string; constructor(id: number, name: string) { this.id = id; this.name = name; } }
This program creates a Book object with readonly properties title and author. It prints the values. Trying to change title later would cause an error.
class Book { readonly title: string; readonly author: string; constructor(title: string, author: string) { this.title = title; this.author = author; } } const myBook = new Book("The Great Gatsby", "F. Scott Fitzgerald"); console.log(myBook.title); console.log(myBook.author); // The following line would cause an error if uncommented: // myBook.title = "New Title";
Readonly properties help prevent bugs by stopping changes to important data.
Trying to change a readonly property outside the constructor will cause a compile-time error.
Readonly is different from const because readonly works on object properties, while const is for variables.
Readonly class properties keep values fixed after they are set.
They can only be assigned when declared or inside the constructor.
Using readonly makes your code safer and easier to understand.
Practice
readonly keyword do when used on a class property in TypeScript?Solution
Step 1: Understand the purpose of
Thereadonlyreadonlykeyword marks a property so it cannot be changed after it is set initially.Step 2: Check when assignment is allowed
Assignment to areadonlyproperty is only allowed during declaration or inside the constructor.Final Answer:
It prevents the property from being changed after initialization. -> Option CQuick Check:
Readonly means fixed value after set [OK]
- Thinking readonly makes property private
- Assuming readonly allows changes anytime
- Confusing readonly with deleting properties
id of type number in a TypeScript class?Solution
Step 1: Recall TypeScript readonly syntax
The correct syntax placesreadonlybefore the property name and type.Step 2: Check each option
readonly id: number; matches the correct syntax:readonly id: number;. Others misuse keywords or order.Final Answer:
readonly id: number; -> Option BQuick Check:
Readonly keyword before property name [OK]
- Using const inside class properties
- Placing readonly after the type
- Combining let with readonly incorrectly
class User {
readonly name: string;
constructor(name: string) {
this.name = name;
}
changeName(newName: string) {
// @ts-ignore
this.name = newName;
}
}
const user = new User('Alice');
user.changeName('Bob');
console.log(user.name);Solution
Step 1: Understand readonly assignment rules
Thenameproperty is readonly and assigned in the constructor, so initial value is 'Alice'. TypeScript enforces this at compile-time.Step 2: Analyze the changeName method
The@ts-ignoresuppresses the TypeScript compile error for assigning to readonly. The code compiles to plain JavaScript, where objects are mutable, sothis.name = newName;sets it to 'Bob' at runtime.Final Answer:
Bob -> Option DQuick Check:
Readonly is compile-time only; runtime allows changes [OK]
- Thinking readonly prevents runtime changes
- Expecting compilation error despite @ts-ignore
- Believing output remains 'Alice'
class Product {
readonly price: number;
constructor() {
// No assignment to price here
}
}
const p = new Product();
p.price = 100;Solution
Step 1: Check readonly property initialization
The readonly propertypricemust be assigned during declaration or in the constructor.Step 2: Analyze constructor and assignment
The constructor does not assignprice, so TypeScript reports an error about missing initialization.Final Answer:
Error: readonly property 'price' is not initialized. -> Option AQuick Check:
Readonly props must be initialized at declaration or constructor [OK]
- Trying to assign readonly property after construction
- Ignoring missing initialization error
- Confusing readonly with private
version property while keeping id readonly?class Document {
readonly id: string;
version: number;
constructor(id: string, version: number) {
this.id = id;
this.version = version;
}
}Solution
Step 1: Understand readonly usage
Theidshould remain readonly to keep it fixed after creation.Step 2: Allow version updates
Theversionproperty is not readonly, so it can be updated safely anytime, for example via a method.Final Answer:
Keepidreadonly and updateversionnormally via a method. -> Option AQuick Check:
Readonly for fixed, normal for changeable [OK]
- Making all properties readonly and losing flexibility
- Removing readonly from fixed properties
- Confusing which property should be updated
Ready to prove it?
Pass the test and this pattern moves unknown
