【类型挑战】实现 Omit,难度⭐️⭐️
2023-02-18 16:41:24 时间
知识运用:
- 什么是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,难度⭐️⭐️
相关文章
- 【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
- 【架构师(第四十三篇)】 服务端开发之单元测试和接口测试
- 【架构师(第四十四篇)】 服务端开发之 pm2 和 nginx 介绍
- 【架构师(第四十六篇)】 服务端开发之安装 Docker
- 【架构师(第四十七篇)】 服务端开发之认识 Docker
- 【架构师(第四十八篇)】 服务端开发之 Dockerfile
- 【架构师(第四十九篇)】 服务端开发之认识 Docker-compose
- 【架构师(第五十篇)】 服务端开发之自动发布到测试机
- 【架构师(第五十一篇)】 服务端开发之技术方案设计
- 【架构师(第五十二篇)】 几个前端工具的基本使用
- 【架构师(第五十三篇)】 性能优化之 HTTP 缓存
- 【前端财富】前端工程师装机指南 (windows10)
- 最近很火的ChatGPT怎么玩?
- 小巧好用的免费虚拟机软件
- [ChatGPT解决方案]生成 nginx 自签名证书
- 完美解决文件格式转换问题
- MariaDB在Oscar故障演练平台的测试实践
- 压缩列表的源码实现
- Docker命令三板斧
- 一文教你快速注册OpenAi(ChatGPT),国内也可以!