Pick 和 Omit 是 TypeScript 内置工具类型,Pick 保留指定字段(白名单),Omit 剔除指定字段(黑名单),均不修改原类型;二者可组合使用,适用于表单提交、数据脱敏等场景。

直接用,不用装包——Pick 和 Omit 是 TypeScript 内置的工具类型,开箱即用。它们不修改原类型,而是基于它“算出”一个新类型:一个只保留你指定的字段,另一个只去掉你不想要的字段。
什么时候用 Pick:明确要留哪些字段
Pick 是“白名单”思路,适合字段少、目标明确的场景。比如表单提交只需要 id 和 name,其他几十个字段都无关。
- 语法是
Pick<原始类型, '字段1' | '字段2'> - 字段名必须是原始类型中真实存在的键,否则编译报错
- 可选属性(
name?: string)和只读修饰符(readonly id: number)都会原样保留
什么时候用 Omit:明确要删哪些字段
Omit 是“黑名单”思路,适合复用大部分字段、只剔除少数敏感或冗余字段的场景。比如 API 响应要排除 password 和 refreshToken。
- 语法是
Omit<原始类型, '字段1' | '字段2'> - 内部实现其实是先算出“剩下的键”,再用
Pick拿出来,所以语义清晰、行为稳定 - 常用于数据脱敏、创建提交载荷(payload)、生成前端展示类型等
搭配使用更灵活
单独用 Pick 或 Omit 已经很实用,但组合起来能解决更复杂的类型推导问题。
立即学习“Java免费学习笔记(深入)”;
- 比如先
Omit<User, 'password'>得到安全类型,再Pick<..., 'id' | 'email'>提取关键字段 - 也可以配合
Partial、Required等工具类型做分层控制 - 注意避免交叉类型(
&)导致never:如果两个类型对同一字段定义了冲突类型(如id: string和id: number),直接交叉会静默失败;此时应先用Omit或Pick剔除矛盾字段


















