前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【类型挑战】Readonly 2,难度⭐️⭐️

【类型挑战】Readonly 2,难度⭐️⭐️

作者头像
前端小鑫同学
发布2022-12-26 11:01:07
5470
发布2022-12-26 11:01:07
举报
文章被收录于专栏:小鑫同学编程历险记

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

知识运用:

  1. 认识和使用Omit。
  2. 认识和使用Pick。
  3. 认识和使用。

题目分析:

题目地址:8-medium-readonly-2

image.png
image.png

如上图所示,这道题目涉及的内容较多,难度对于刚学类型编程不就的伙伴来说挺难的,我们先参考社区的答案来解析,后续巩固。

题目解答:

测试用例:

本次测试用例重点关注前两个即可,一个是需要全部处理为Readonly,而另一个需要对指定的KEY处理为Readonly。

代码语言:javascript
复制
/* _____________ 测试用例 _____________ */
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是什么意思呢?哪位伙伴说一下?

代码语言:javascript
复制
/* _____________ 答案 _____________ */
type MyReadonly2<T, K extends keyof T = keyof T> = Omit<T, K> &amp; Readonly<Pick<T, K>>;

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识运用:
  • 题目分析:
  • 题目解答:
    • 测试用例:
      • 答案及解析:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档