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> 的内部实现大致是这样的:

  1. 使用 keyof T 获取类型 T 的所有属性。
  2. 使用 Exclude<keyof T, K> 排除掉不需要的属性 K
  3. 使用 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, ...> 用来选择这些属性。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值