omit 是 typescript 中用于剔除对象类型指定字段的内置工具类型,接收原始类型 t 和要排除的键联合类型 k,支持静态键、复用类型及 keyof 动态推导,与 pick 形成“删”与“选”的互补关系。

Omit 是 TypeScript 中用于快速剔除对象类型中指定字段的内置工具类型,语法简洁、语义明确,适合在需要“减法式”构造新类型时使用。
基本用法:传入类型和要排除的键名
Omit
- T:原始对象类型(如 interface 或 type 定义)
-
K:要排除的属性名联合类型,必须是 T 中实际存在的键(字符串字面量类型,如
'id'|'password')
示例:
interface User {id: number;
name: string;
email: string;
password: string;
createdAt: Date;
}
type PublicUser = Omit
// 等价于 { id: number; name: string; email: string; }
注意键名必须存在于原类型中
如果传入了原类型里不存在的键,TypeScript 不会报错,但该键会被静默忽略——因为 Exclude<keyof t k></keyof> 的行为决定了:不在 keyof T 中的键不会影响结果。
比如:
type SafeUser = Omit// 'token' 不在 User 中 → 实际只排除 'password'
// 结果仍是 { id: number; name: string; email: string; createdAt: Date; }
所以建议配合 IDE 类型提示或先检查 keyof User,避免误以为排除了不存在的字段。
支持联合字面量与动态键推导
第二个参数 K 可以是多个键组成的联合类型,也支持从其他类型中提取:
- 手动写:
Omit<user></user> - 复用已有类型:
type SensitiveKeys = 'password' | 'token'; type LeanUser = Omit<user sensitivekeys>;</user> - 结合 keyof 动态获取:
type NonIdUser = Omit<user>;</user>(常见于 DTO/响应体精简)
和 Pick 的分工:选 vs 删
当要保留的字段少、要剔除的字段多时,Omit 更直观;反之 Pick 更合适。
例如用户详情页展示需 8 个字段,仅隐藏 2 个敏感字段(如 password、refreshToken),用 Omit 写一次就清晰:
type UserProfileView = Omit而如果只取 2–3 个字段(如仅需 id 和 name),Pick 更直接:
type IdNameOnly = Pick











