Skip to content

Latest commit

 

History

History
49 lines (36 loc) · 1.12 KB

easy-readonly.md

File metadata and controls

49 lines (36 loc) · 1.12 KB
id title lang level tags
7
Readonly
en
easy
built-in readonly object-keys

Challenge

Implement the built-in Readonly<T> generic without using it.

Constructs a type with all properties of T set to readonly, meaning the properties of the constructed type cannot be reassigned.

For example:

interface Todo {
  title: string;
  description: string;
}

const todo: MyReadonly<Todo> = {
  title: "Hey",
  description: "foobar",
};

todo.title = "Hello"; // Error: cannot reassign a readonly property
todo.description = "barFoo"; // Error: cannot reassign a readonly property

Solution

We need to make all the properties in the object read-only. Therefore, we need to iterate over all the properties and add a modifier to them.

We are going to use the usual Mapped Type here, nothing serious. For each property in the type, we take its key and add a readonly modifier to it:

type MyReadonly<T> = { readonly [K in keyof T]: T[K] };

References