以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - TypeScript 类型谜题
3. 实现Readonly<T>
可以使用索引类型和readonly
关键字来实现MyReadonly<T>
。
type MyReadonly<T> = {
readonly [P in keyof T]: T[P]
}
这个类型定义中,通过keyof T
遍历T
类型的所有属性,然后使用readonly
关键字将它们设为只读。
使用示例:
type Foo = {
a: string
}
const a: Foo = {
a: 'BFE.dev',
}
a.a = 'bigfrontend.dev'
// OK
const b: MyReadonly<Foo> = {
a: 'BFE.dev'
}
b.a = 'bigfrontend.dev'
// Error: Cannot assign to 'a' because it is a read-only property.