Readonly
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
Die Lösung dieses Problems liegt darin, jeden Schlüssel des Objektes als readonly zu definieren.
Man erreicht dies durch eine Iteration über die Schlüssel / Attribute des Objektes und erzeugt hierdurch einen Mapped Type.
type MyReadonly<T> = {
readonly [key in keyof T]: T[key];
};