Readonly (readonly) property in Typescript

Readonly (readonly) property in Typescript

(readonly) is a access modifier to mark properties as immutable property.

ยท

3 min read

type User = {
  readonly _id: string; 
  name: string;
  email: string;
  isActive: boolean;
  hobbies: string;
};

Here we have declared a User type that has properties like

  • _id (readonly) - readonly _id: string;

  • name - name: string;

  • email - email: string;

  • isActive - isActive: boolean;

among them _id is a readonly property which means we can not change in other words it is an immutable property

let myUser: User = {
  _id: "1234567",
  name: "Abir",
  email: "a@a.com",
  isActive: false,
  hobbies: "coding",
};

myUser.email = "a@target.com";
myUser._id = "8473985793425";

Here we are reinitializing the email but when we are trying to reinitialize the _id it shows that since it is a read-only property so we cannot assign value to it which is given below ๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡


If hobbies would be an array, then can we push values to the array in case of readonly?

Let's define a new type of user having multiple hobbies and make it a readonly property

type newUser = {
  readonly _id: string;
  name: string;
  email: string;
  isActive: boolean;
  readonly hobbies: string[];
};
let User1: newUser = {
  _id: "37846823",
  name: "Anish Gupta",
  email: "anish@gupta.com",
  isActive: true
  hobbies: ["Painting", "Coding", "Building Apps and websites"],
};

Now if we try to change the original array then it will give an error since the hobbies are readonly type

User1.hobbies = ["Singing", "Dancing"]

But we can push new values to the array by using .push function which mutates the original array without making an entirely new array even if the array is a readonly

User1.hobbies.push("Reading")

So, the answer is YES then can we push values to the array in case of readonly


Now If we want that nobody can push any values or elements to the readonly array then how to make the elements inside the array readonly ?

type newUser = {
  readonly _id: string;
  name: string;
  email: string;
  isActive: boolean;
  readonly hobbies: readonly string[];
};

let User2: newUser = {
  _id: "37846823",
  name: "Anish Gupta",
  email: "anish@gupta.com",
  isActive: true
  hobbies: ["Painting", "Coding", "Building Apps and websites"],
};

This will make the elements inside the array as readonly Now we cannot insert or push new elements into the array. Since the array and the elements both are readonly

User2.hobbies.push("Reading")

This will give you this error ๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡

In TypeScript, the readonly property is used to mark properties as immutable, meaning they cannot be changed. When an object is declared with a readonly property, attempts to modify that property will result in an error. However, if the readonly property is an array, new values can be added to the array using the .push() function, even though the array itself remains immutable. To make the elements inside the array also immutable, use the readonly keyword for the array elements.

Great job on taking the time to learn and expand your knowledge! Keep up the hard work and don't give up on your learning journey. Remember to take breaks and take care of yourself along the way. You've got this!


Explore More and comment below that -

What other access modifiers are available in Typescript besides readonly?

ย