【类型挑战】Readonly 2,难度⭐️⭐️
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 认识和使用Omit。
- 认识和使用Pick。
- 认识和使用。
题目分析:
题目地址:8-medium-readonly-2
如上图所示,这道题目涉及的内容较多,难度对于刚学类型编程不就的伙伴来说挺难的,我们先参考社区的答案来解析,后续巩固。
题目解答:
测试用例:
本次测试用例重点关注前两个即可,一个是需要全部处理为Readonly,而另一个需要对指定的KEY处理为Readonly。
/* _____________ 测试用例 _____________ */ import type { Alike, Expect } from '@type-challenges/utils' type cases = [ Expect<Alike<MyReadonly2<Todo1>, Readonly<Todo1>>>, Expect<Alike<MyReadonly2<Todo1, 'title' | 'description'>, Expected>>, Expect<Alike<MyReadonly2<Todo2, 'title' | 'description'>, Expected>>, ] interface Todo1 { title: string description?: string completed: boolean } interface Todo2 { readonly title: string description?: string completed: boolean } interface Expected { readonly title: string readonly description?: string completed: boolean }
答案及解析:
- 假如我们传入了K,那么需要处理为Readonly的对象我们可以使用Pick选出这几个key组成的对象类型。
- 再借用内置的Readonly工具将这个对象类型直接处理。
- 那么为指定到K的属性不就丢了吗?我们可以使用Omit来排除掉已传入K的两个后得到剩余的一个K。
- 在通过&将两个对象类型链接起来得到一个完整的满足2,3用例的答案。
- 右边的说完了,再看下左边,我们通常的K就直接通过extends keyof T来约束必须在T中存在了。这个K extends keyof T = keyof T是什么意思呢?哪位伙伴说一下?
/* _____________ 答案 _____________ */ type MyReadonly2<T, K extends keyof T = keyof T> = Omit<T, K> & Readonly<Pick<T, K>>;
接下来的一题是:【类型挑战】深度 Readonly,难度⭐️⭐️
欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)