Readonly
挑战
实现内置的Readonly<T>
泛型而不使用它。
构造一个将T
所有属性设置为readonly
的类型,这意味着该类型的属性不可以重新赋
值。
例如:
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
解答
我们需要使对象中的所有属性都是只读的。因此,我们需要迭代所有的属性,并为它们添加 一个修饰符。
我们将在这里使
用映射类型,
很简单。对于该类型的每个属性,我们获取它的键并为其添加一个readonly
修饰符:
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
评论