【类型挑战】实现 Omit,难度⭐️⭐️
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情。
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 什么是Omit?
- 如何遍历联合类型?
- 使用内置的Exclude。
题目分析:
题目地址:3-medium-omit
如上图所示,我们需要实现的通用类型工具的要求需要满足可以将传入的对象在忽略掉指定key的字段后再返回输出。
题目解答:
测试用例:
我们的测试用例需要满足按需省略掉对象中存在的属性,当需要省略的属性不存在时将会抛出错误。
/* _____________ 测试用例 _____________ */ 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 }
答案及解析:
- 观察测试用例,我们传入的K有两个特点,一个是K必须存在T中,另一个是需要使用keyof来得到T中属性组成的联合类型。
- 接着我们需要使用内置的Exclude来从T的属性组成的联合类型中排除K的存在。
- 通过in来遍历剩余的属性,并通过索引类型访问来读取每个U的值,最后组成一个U:T[U]。
/* _____________ 你的代码 _____________ */ type MyOmit<T, K extends keyof T> = { [U in Exclude<keyof T, K>]: T[U] }
接下来的一题是:【类型挑战】Readonly 2,难度⭐️⭐️
欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)