我可以告诉我的泛型,它应该只是一个函数吗?

Can I tell my generic, about that it should be only a function?

我有错误 属性 'apply' 在我的主函数 'T[K]' 上不存在

const main = <T>(root: T) => <K extends keyof T>(method: K, ...args: any[]) => {
  root[method].apply(this, ...args);
};

老实说除了举个例子:

const main = <T>(root: T) => <K extends keyof T>(method: K, ...args: any[]) => {
  (<any>root[method]).apply(this, ...args);
};

更新

我可能没有这么说,但我的意思是这个例子...

更新 2

第二次调用 level3 和方法 level4/5(且仅)- works perfectly!

如果我添加另一个类型(数字)的 level6 - everything collapses :(

而且很有意思为什么第一次调用总是报错?

在这种情况下,如果您使 运行 - 一切正常,结果是 'foo' 和 'bar',但编译器打字稿会产生错误

你可以这样做:

const main = <T extends { [key: string]: Function }>(root: T) => <K extends keyof T>(method: K, ...args: any[]) => {
    root[method].apply(this, args);
};

(code in playground)

请注意,Function.prototype.apply() 需要一个数组作为其第二个参数,因此您不应使用展开运算符。