通常泛型函数是这样定义和调用的:
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
上进行类型推断。
最佳答案
是的。
您可以像这样创建一个描述您想要的界面:
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>({});
关于generics - 我可以使用 function.call() 调用通用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559086/