Readonly
Проблема
Реализовать встроенный Readonly<T>
не используя его. Этот тип создает новый
объект с неизменяемыми свойствами из объекта T
. Например:
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
Решение
Нам нужно взять все свойства из объекта T
и сделать их неизменяемыми.
Следовательно, нам нужно их перечислить и добавить модификатор readonly
к
каждому из свойств.
Для того чтобы перечислить свойства объекта, можно использовать сопоставляющие
типы. Для каждого ключа из объекта, добавляем модификатор readonly
, а значение
берём без изменений из T
.
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
Комментарии