2017-04-23 62 views
0

我有错误住宅 '申请' 的类型不存在 '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); 
}; 

UPDATE

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

UPDATE 2

用级别3和方法级别4/5(只)的第二个呼叫 - works perfectly!

如果我添加另一种类型的6级(数字) - everything collapses :(

而且它是非常有趣的是为什么第一次打电话总是错误?

在这种情况下,如果您运行 - 一切正常,结果是“富”和“酒吧”,但是编译器打字稿产生一个错误

+0

我不认为你需要一个通用的函数。看来你要找的是非常具体的。有什么我失踪的? –

+0

获得以下内容。 在新示例中,UPDATE 2 –

+0

您的结构非常具体。通用解决方案是没有意义的。你将最终以太多的工作方式结束,最终会出现一个难以理解的解决方案,它可能包含比所需更多的代码,并且性能会比特定的解决方案差。我强烈建议你放弃这个想法。 –

回答

0

你可以这样做:

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()需要一个数组作为其第二个参数,所以你不应该使用扩展运算符。

+0

感谢您的回答,我回复了一个更新(stackoverflow不允许长链接插入评论) –

相关问题