You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从TypeScript的ReadWrite接口派生出只读的ReadonlyInt接口?

当然可以实现!不用手动复制字段的优雅方案

你完全不需要手动复制readwrite里的所有字段,TypeScript本身就提供了专门的工具来帮你快速生成只读版本的类型/接口,还能自动同步原接口的字段变化,非常适合字段多的场景。

方法1:使用内置的Readonly<T>工具类型

这是最直接的方式,TypeScript标准库自带的Readonly<T>工具类型,会自动将传入类型T的所有属性转换为只读(readonly)状态。你可以直接用它生成只读版本的类型:

interface Readwrite { 
  f1: string; 
  f2: boolean; 
}

// 生成只读版本的类型
type ReadonlyInt = Readonly<Readwrite>;

// 使用示例:此时ReadonlyInt的f1和f2都是只读的
const obj: ReadonlyInt = { f1: "test", f2: true };
obj.f1 = "new value"; // 这里会报错,因为f1是只读属性

方法2:定义继承式的只读接口

如果你确实需要一个接口而不是类型别名,也可以通过接口继承Readonly<T>的方式来实现:

interface Readwrite { 
  f1: string; 
  f2: boolean; 
}

// 继承Readonly<Readwrite>来创建只读接口
interface ReadonlyInt extends Readonly<Readwrite> {}

// 使用效果和上面完全一致
const obj: ReadonlyInt = { f1: "test", f2: true };
obj.f2 = false; // 同样会触发类型错误

为什么这两种方式好用?

不管是用类型别名还是接口继承,当你后续修改readwrite接口的字段(比如新增、删除或者修改字段类型),ReadonlyInt都会自动同步这些变化,完全不需要手动维护两个接口的字段一致性,完美解决了你担心的字段列表过长的问题。

内容的提问来源于stack exchange,提问作者Galdor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:48:10