迁移TS代码时,如何为Function.prototype声明适配任意签名的for方法?
解决Function.prototype.bind.for的TypeScript全局声明问题
直接修改global.d.ts,通过泛型约束实现对任意函数签名的适配,具体代码如下:
declare global { interface Function { /** * 绑定函数上下文,返回与原函数签名一致的绑定函数 * @param thisArg 要绑定的上下文对象 */ for<T extends any[], R>(thisArg: any): (...args: T) => R; } } export {};
说明:
- 泛型
T代表原函数的参数类型数组,R代表原函数的返回值类型,TypeScript会自动根据调用的函数推导这两个泛型的具体类型 - 这样定义后,不管是调用
this._addHeaders.for(this)还是事件绑定函数(如buttonClickHandler.for(this)),TypeScript都会正确识别绑定后函数的参数和返回类型,避免编译错误 - 完全兼容你提到的“返回固定绑定方法用于移除监听”的场景,因为绑定后的函数类型与原函数完全一致,符合事件监听/移除的类型要求
内容的提问来源于stack exchange,提问作者CheloXL
相关产品推荐
相关产品推荐

