partial 和 readonly 是 typescript 中用于安全变形类型的内置工具类型:partial 将所有属性变为可选,适用于部分更新场景;readonly 将第一层属性设为只读,适用于不可变配置或缓存;二者均不改变运行时行为,仅在编译期提供类型约束。

在 TypeScript 中,Partial 和 Readonly 是两个高频、实用的内置工具类型,它们不改变原始结构,而是通过映射类型对已有类型做“安全变形”,让代码更灵活也更可靠。
Partial:让所有字段变成可选
当你需要处理“部分更新”或“初始化阶段字段不全”的场景时,Partial 就派上用场了。它把目标类型的所有属性都加上 ?,变成可选。
- 比如用户信息接口返回数据可能只含部分字段,但你又想复用
User类型定义,这时直接写Partial<user></user>即可 - 函数参数常配合使用:一个更新用户资料的函数,不需要传入全部字段,只需声明参数为
Partial<user></user> - 注意:
Partial不影响嵌套对象——如果User.profile是个对象,它的内部属性不会自动变可选;需手动嵌套或用递归工具类型
Readonly:禁止修改已有属性
Readonly 把类型里每个属性前加上 readonly 修饰符,生成的新类型不允许赋值操作,适合配置项、共享状态、API 响应缓存等不可变场景。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 常见用法是包裹接口或类型别名,例如
type Config = Readonly - 它只作用于第一层属性;若属性本身是对象(如
user.address),address对象内部仍可修改,除非你也对它加Readonly - 与
const声明不同:Readonly是类型层面约束,运行时不影响,但能防止误写和 IDE 提示错误
组合使用更贴近真实需求
实际项目中,这两个类型经常和其他工具类型一起用,比如:
-
Readonly<partial>></partial>:表示一个“只读的部分用户数据”,常见于展示组件接收的 props - 搭配
Record定义键值映射,再用Readonly锁定整个字典:const STATUS_MAP: Readonly<record number>> = { PENDING: 0, DONE: 1 };</record> - 用
Required补齐缺失字段后再设为Readonly,适合从 API 获取完整数据后的只读缓存
别忘了它们只是类型,不产生运行时代码
Partial、Readonly 等都是编译期行为,TypeScript 编译后会抹掉所有类型信息,最终 JS 运行时不受影响。它们的价值在于:提前暴露问题、减少注释依赖、让协作更直观——看到 Readonly<user></user> 就知道这个对象不该被改,看到 Partial<formvalues></formvalues> 就明白表单可以分步填写。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










