Omit<T, K> 解释
Omit<T, K>
是 TypeScript 中的一个内置工具类型,用于从现有类型 T
中排除(即忽略或移除)指定的属性 K
,并生成一个新的类型。
当你有一个对象类型 T
并希望创建一个新的类型,该类型与 T
相同但没有某些特定的属性时,Omit<T, K>
就非常有用。
Omit<T, K>
T
是你想要从中排除某些属性的原始类型。K
是你想要从T
中排除的一个或多个属性的联合类型。
示例
假设我们有一个 Todo
接口定义如下:
interface Todo {title: string;description: string;completed: boolean;
}
如果我们想创建一个新的类型 TodoPreview
,它与 Todo
类似,但是没有 description
和 title
属性,我们可以使用 Omit
如下:
type TodoPreview = Omit<Todo, 'description' | 'title'>;
现在 TodoPreview
的类型定义如下:
type TodoPreview = {completed: boolean;
}
详细解释
Omit<T, K>
的内部实现大致是这样的:
- 使用
keyof T
获取类型T
的所有属性。 - 使用
Exclude<keyof T, K>
排除掉不需要的属性K
。 - 使用
Pick<T, Exclude<keyof T, K>>
选择剩下的属性来创建新类型。
内部实现示例
如果你需要手动实现 Omit
,可以这样做:
type MyOmit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
这里,Exclude<keyof T, K>
生成除了 K
以外的所有属性的联合类型,然后 Pick<T, ...>
用来选择这些属性。