ts - 实现Readonly

139 阅读1分钟

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

Readonly会接收一个 泛型参数,并返回一个完全一样的类型,只是所有属性都会被readonly所修饰。也就是不可以再对该对象的属性赋值。

例如:

interface Todo {
    title: string
    description: string
}

const todo: MyReadonly<Todo> = {
    title: 'Hey',
    description: 'footbar'
}

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