以下为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.