实现 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
测试用例如下
import { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<MyReadonly<Todo1>, Readonly<Todo1>>>,
]
interface Todo1 {
title: string
description: string
completed: boolean
}
答案如下
type MyReadonly<T> = { readonly [K in keyof T]: T[K] }