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

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

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


知识运用:

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

题目分析:

题目地址:3-medium-omit image.png 如上图所示,我们需要实现的通用类型工具的要求需要满足可以将传入的对象在忽略掉指定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
}

答案及解析:

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

去演练场验证答案

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


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

posted @   前端小鑫同学  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示