这是一个系列的主要是针对Typescript的体操入门,实际题目都是来自于type-challenges,后面可能也会穿插一些拆分出来的思考习题(也欢迎大家提出一些有意思的题去一块学习),这里会大概以每周1题(前面很多简单题会快一些)的顺序去带着大家一起去练习和讲解。我个人也是去年才开始学习和使用Typescript,在中间存在任何概念或者描述错误的也希望大家直接指出来,共同进步。
这个就是实现个内置方法Pick从对象中拆分出想要的key
type MyPick<T, K extends keyof T> = {
[k in K]: T[k]
}
最规范的实现比较简单,他要求传入的K必须是T的key的子类,这里直接遍历传入的联合去获取T上对应的值就完成了
实际这段代码就包含了泛型、extends、keyof、in、Mapped Types概念,不过在最开始不要过分的深究这些字段的具体含义,先简单的粗略理解泛型为变量,extends就是一个兜底行为,他没有声明必须是什么但是至少是extends以上,keyof返回key的联合,Mapped Types是未确定的对象结构
我的第一次实现是这样的 也就是处理了非T的key的情况 这里看到一个as这里可以修改Mapped Types的值
type MyPick<T, K> = {
[k in keyof T as k extends K ? k : never]: T[k]
}