利用分布式条件类型的特性完成功能.
具体语法见 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 的区别完成功能.
利用 {[key: PropertyKey]: never}
或 Record<PropertyKey, never>
定义了一个空对象类型, 即 {}
.
利用 Omit<T & U, never>
的形式整合类型输出. Omit<T & U, never>
会创建一个单一类型, 等价于交叉类型 T & U
的表示.
类似, 也可以使用 Omit<T, never>
来拷贝一份 T
类型.