体操基础
体操全集: https://github.com/type-challenges/type-challenges/blob/main/README.zh-CN.md
Partial
解释:
in: in的用法是要用在类型遍历中形如上图这种{} 下 in 后面要是一个string、number、symbol联合类型,比如你可以keyof '1213'|'123123'|'13123' 但是不能p in [];
keyof 是将一个接口(interface)或者类型(type)转变成他的key的联合类型
T[p] 类似于js本身语法 T是个对象,P是他的key T[p] 就是他原来的值
Exculde
解释:
never 联合其他类型是没有never的
T extends U ?never : T 属于条件类型 知识点:分布式条件类型
这里有个思考就是1 的解题思路是{} {}中遍历key的形式。2的解题思路是条件类型 他俩有什么区别? 答 1 是对接口中key的筛选或处理,比如Pick(筛选出符合条件的key)、Record(给key赋值),2 是对联合类型的筛选 比如Exculde(例如:将'a'|'b' 筛选成'a')
Require 将类型T所有属性设为require
Pick<T, K> 从类型T 中挑选部分属性K 来构造新的类型
Extract<T, U> 从类型T中提取所有可以赋值给U的类型
Omit<T, K> 从类型T中剔除所有能赋值给K的属性
NonNullable 从T中剔除null和undefined
ReturnType
infer 这个东西必须用到条件语句中,用来推断。而且他有自己的作用域
实现一个判断startWith<T, U>
使用映射类型实现window.addEvent
PickByType
很有意思的是拿as 约束了 key遍历的数量
Mutable
Length of String
思路: ts支持通过length变量取数组的长度,所以核心本质是字符串转数组,然后取长度; 另外ts中迭代基本就是模拟计算机手动压栈的过程;
Last updated
Was this helpful?