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

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

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


知识运用:

  1. 基础对象Readonly处理。
  2. 递归在类型编程中的运用。
  3. 如果类型的内容是函数类型,那么keyof得到的事never类型。

题目分析:

题目地址:9-medium-deep-readonly image.png 如上图所示,我们需要设计一个通用的类型工具可以将一个深度嵌套的对象的key全部处理成readonly。

题目解答:

测试用例:

测试用例比较简单,我们来看答案解析吧。

/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<DeepReadonly<X>, Expected>>,
]
type X = {
a: () => 22
b: string
c: {
d: boolean
e: {
g: {
h: {
i: true
j: 'string'
}
k: 'hello'
}
l: [
'hi',
{
m: ['hey']
},
]
}
}
}
type Expected = {
readonly a: () => 22
readonly b: string
readonly c: {
readonly d: boolean
readonly e: {
readonly g: {
readonly h: {
readonly i: true
readonly j: 'string'
}
readonly k: 'hello'
}
readonly l: readonly [
'hi',
{
readonly m: readonly ['hey']
},
]
}
}
}

答案及解析:

  1. 输入类型这个就不错过多的限制了,接收T即可。
  2. 实现我们最基础的:{ readonly [k in keyof T]: T[k] }
  3. 当T[key]可能是对象类型,所以还是使用DeepReadonly递归处理{ readonly [k in keyof T]: DeepReadonly<T[k]> }
  4. 我们还需要对T的每个key进行限制,限制key不能是never类型的才需要只读处理。
type DeepReadonly<T> = keyof T extends never ? T : {readonly [k in keyof T]: DeepReadonly<T[k]>};

去演练场验证答案

接下来的一题是:【类型挑战】元组转联合,难度⭐️⭐️


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

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