前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【类型挑战】实现 Omit,难度⭐️⭐️

【类型挑战】实现 Omit,难度⭐️⭐️

作者头像
前端小鑫同学
发布2022-12-26 11:00:27
2860
发布2022-12-26 11:00:27
举报
文章被收录于专栏:小鑫同学编程历险记

知识运用:

  1. 什么是Omit
  2. 如何遍历联合类型?
  3. 使用内置的Exclude。

题目分析:

题目地址:3-medium-omit

image.png
image.png

如上图所示,我们需要实现的通用类型工具的要求需要满足可以将传入的对象在忽略掉指定key的字段后再返回输出。

题目解答:

测试用例:

我们的测试用例需要满足按需省略掉对象中存在的属性,当需要省略的属性不存在时将会抛出错误。

代码语言:javascript
复制
/* _____________ 测试用例 _____________ */
import { Equal, Expect } from '@type-challenges/utils'

type cases = [
  Expect<Equal<Expected1, MyOmit<Todo, 'description'>>>,
  Expect<Equal<Expected2, MyOmit<Todo, 'description' | 'completed'>>>
]

// @ts-expect-error
type error = MyOmit<Todo, 'description' | 'invalid'>

interface Todo {
  title: string
  description: string
  completed: boolean
}

interface Expected1 {
  title: string
  completed: boolean
}

interface Expected2 {
  title: string
}
复制代码
答案及解析:
  1. 观察测试用例,我们传入的K有两个特点,一个是K必须存在T中,另一个是需要使用keyof来得到T中属性组成的联合类型。
  2. 接着我们需要使用内置的Exclude来从T的属性组成的联合类型中排除K的存在。
  3. 通过in来遍历剩余的属性,并通过索引类型访问来读取每个U的值,最后组成一个U:T[U]。
代码语言:javascript
复制
/* _____________ 你的代码 _____________ */

type MyOmit<T, K extends keyof T> = {
  [U in Exclude<keyof T, K>]: T[U]
}
复制代码

去演练场验证答案

接下来的一题是:【类型挑战】Readonly 2,难度⭐️⭐️

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识运用:
  • 题目分析:
  • 题目解答:
    • 测试用例:
      • 答案及解析:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档