关键词: TypeScript, TypeChallenge
实现内置的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
type MyReadonly<T> = {
readonly [K in keyof T]: T[K];
};
遍历T
的每一个 key, 对每一个K
添加
readonly
描述符
, 而K
对应的值的类型即为对象上原本的类型T[K]
伪码:
function MyReadonly(T) {
const returnType = {};
// 获得 T 上所有的 key
for (let K in T) {
returnType[K] = readonly(T[K]);
}
return returnType;
}