Skip to content

Latest commit

 

History

History
68 lines (36 loc) · 2.07 KB

note.md

File metadata and controls

68 lines (36 loc) · 2.07 KB

技巧记录

分布式条件类型

利用分布式条件类型的特性完成功能.

通过 as 来给 key 取别名

具体语法见 key remapping via as

利用取别名的方式将对象中不满足要求的键名转换为 never 类型, 以达到过滤的目的.

泛型的默认值

利用 <T, K extends keyof T = keyof T> 给泛型参数 K 赋予默认值.

字面量类型的技巧

利用字面量和类型推导, 完成了 trimLeft 效果.

${} 的方式将其他类型转为字面量类型.

type Absolute<T extends number | string | bigint> = `${T}` extends `-${infer U}` ? U : `${T}`

字面量类型使用了 ${infer L}${infer R} 的时候, L 只表示第一个字符, R 表示剩余字符.

字面量类型使用 ${U}${infer Rest} 的时候, U 表示确定的匹配的那个字符串 (待匹配的前缀), Rest 表示剩余的字符.

& 与 | 的区别

利用 & 与 | 的区别可以更加优雅地实现 diff 方法.

T extends string 和 string extends T 的区别

利用 T extends string 和 string extends T 的区别完成功能.

定义一个空对象类型

利用 {[key: PropertyKey]: never}Record<PropertyKey, never> 定义了一个空对象类型, 即 {}.

利用 Omit 整合联合或交叉类型

[required by keys] 和 [partial by keys]

利用 Omit<T & U, never> 的形式整合类型输出. Omit<T & U, never> 会创建一个单一类型, 等价于交叉类型 T & U 的表示. 类似, 也可以使用 Omit<T, never> 来拷贝一份 T 类型.