TypeScript 挑战(二)- 实现 Readonly

实现 Readonly,学习记录

题目简介


无需使用内置的Readonly<T>泛型即可。

构造一个类型,并将T的所有属性设置为只读,这意味着无法重新分配所构造类型的属性。

例如

1
2
3
4
5
6
7
8
9
10
11
12
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

测试用例如下

1
2
3
4
5
6
7
8
9
10
11
import { Equal, Expect } from '@type-challenges/utils'

type cases = [
Expect<Equal<MyReadonly<Todo1>, Readonly<Todo1>>>,
]

interface Todo1 {
title: string
description: string
completed: boolean
}

答案如下

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