我可以告诉我的泛型,它应该只是一个函数吗?
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);
};
请注意,Function.prototype.apply() 需要一个数组作为其第二个参数,因此您不应使用展开运算符。
我有错误 属性 '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);
};
请注意,Function.prototype.apply() 需要一个数组作为其第二个参数,因此您不应使用展开运算符。