我可以使用 function.call() 调用通用函数吗?

Can I call a generic function using function.call()?

通常泛型函数是这样定义和调用的:

function identity<T>(arg: T): T {
    return arg;
}
const id1 = identity<string>("hei");

有没有办法用 function.bind()function.call()function.apply() 调用泛型函数?如何指定类型参数?

例如,这编译正确,但编译器给我一个错误。

function boundIdentity<T>(this: T): T {
    return this;
}
const id2 = boundIdentity.call<Object>({});

如果我删除类型参数,该函数将按预期工作,但我没有在 id2.

上进行类型推断

See in Typescript Playground

是的。

您可以像这样创建一个描述您想要的界面:

interface IBoundIdentityFunction {
    <T>(this: T): T;
    call<T>(this: Function, ...argArray: any[]): T;
}

并像这样使用它:

let boundIdentity: IBoundIdentityFunction = function<T>(this: T): T {
    return this;
}

现在您将在执行此操作时获得类型推断:

const id2 = boundIdentity.call<Object>({});

See in TypeScript Playground