一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


知识运用:

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

题目分析:

题目地址:3-medium-omit
image.png
如上图所示,我们需要实现的通用类型工具的要求需要满足可以将传入的对象在忽略掉指定key的字段后再返回输出。

题目解答:

测试用例:

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

  1. /* _____________ 测试用例 _____________ */
  2. import { Equal, Expect } from '@type-challenges/utils'
  3. type cases = [
  4. Expect<Equal<Expected1, MyOmit<Todo, 'description'>>>,
  5. Expect<Equal<Expected2, MyOmit<Todo, 'description' | 'completed'>>>
  6. ]
  7. // @ts-expect-error
  8. type error = MyOmit<Todo, 'description' | 'invalid'>
  9. interface Todo {
  10. title: string
  11. description: string
  12. completed: boolean
  13. }
  14. interface Expected1 {
  15. title: string
  16. completed: boolean
  17. }
  18. interface Expected2 {
  19. title: string
  20. }

答案及解析:

  1. 观察测试用例,我们传入的K有两个特点,一个是K必须存在T中,另一个是需要使用keyof来得到T中属性组成的联合类型。
  2. 接着我们需要使用内置的Exclude来从T的属性组成的联合类型中排除K的存在。
  3. 通过in来遍历剩余的属性,并通过索引类型访问来读取每个U的值,最后组成一个U:T[U]。 ```typescript / _ 你的代码 _ /

type MyOmit = {

} ``` 去演练场验证答案

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


欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。