如何在TypeScript中定义像www.example.com()这样的函数Function.prototype.call

gijlo24d  于 2023-03-19  发布在  TypeScript
关注(0)|答案(1)|浏览(146)

函数类型的call方法具有与源函数类似的签名,但是在列表的开头有一个额外的参数,用作新函数的新this
如何在TypeScript中声明这样的方法?
我想要的是

function makenewfunction<T>(fun: T):<U extends function as function(thisarg:any restParam of T):V as return type of T

但是我在文档中找不到合适的方法。

cuxqih21

cuxqih211#

此实现创建一个新函数,该函数 Package 原始函数并添加一个附加参数,该参数将用作新函数的this参数:

function makeFn<F extends (...args: any) => any>(fn: F):
    (...args: [unknown, ...Parameters<F>]) => ReturnType<F> {

    return (thisArg, ...args) => fn.call(thisArg, ...args);
}

function fn(this: {property: string}, arg: string) {
    return [this.property, arg].join(' ');
}

const newFn = makeFn(fn);

console.log(newFn({ property: 'Hello' }, 'world!'));

Playground链接

相关问题