加粗样式
联系我们:有道技术团队助手:ydtech01 / 邮箱:[email protected]
本文是《玩转TypeScript工具类型》系列的最后一篇,包含了如下几部分内容:
- ThisParameterType
- OmitThisParameter
- ThisType
快捷跳转
一. ThisParameterType
提取一个函数类型显式定义的 this 参数,如果没有显式定义的 this 参数,则返回 unknown 。 这里有如下几个需要注意的点:
- this参数只能叫 this,且必须在参数列表的第一个位置
- this 必须是显式定义的
- 这个 this 参数在函数实际被调用的时候不存在,不需要显式作为参数传入,而是通过 call、apply或者是 bind 等方法指定
1.1 源码解析
type ThisParameterType<T> = T extends (this: infer U, ...args: any[]) => any ? U : unknown;
从源码可以看出对于类型参数 T 是要严格匹配 (this: infer U, …args: any[]) => any格式的,所以对于 this 参数的名称和位置都是固定的。剩下的逻辑就是对 this 参数的类型定义一个类型参数 U ,在 extends 判断走 true 分支时返回 this 类型参数 U ,false 分支就返回 unknown。
1.2 实战用法
显式的定义 this 类型有助于我们在函数内部安全的使用 this 。
function toHex(this: Number) {
return this.toString(16);
}
function numberToStrin