Skip to main content

实现 Readonly

题目

不要使用内置的Readonly<T>,自己实现一个。

Readonly 会接收一个 泛型参数,并返回一个完全一样的类型,只是所有属性都会被 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

题目来源:https://tsch.js.org/7/zh-CN

解答

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

思路

使用readonly关键字声明属性是只读属性。
使用keyof T取出泛型T中的所有key,再用in遍历。