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

标签 generics typescript 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

关于generics - 我可以使用 function.call() 调用通用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559086/

相关文章:

Java 泛型类型在这种情况下不起作用

angular - 将 Crypto-JS 导入 Angular 2 项目

javascript - JSDoc:类型 'value' 上不存在属性 'EventTarget'

reactjs - Intersection Observer API 进入无限渲染循环

java - 从 Android 中的非 Activity 类调用方法

javascript - 函数调用和函数引用有什么区别?

actionscript-3 - Function.call(someInstance,args) 用于方法。忽略第一个参数

java - 在使用泛型参数调用方法时,有什么方法可以避免类型转换?

delphi - 如何将对象转换为泛型?

generics - 对于必须实现 "iter"函数的类型,我应该使用哪个特征边界