TypeScript 挑战(二)- 实现 Readonly<T>

实现 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] }