typescript - 使用参数调用对象的成员

标签 typescript

function whatever(object, methodName, args) {
  return object[methodName](...args);
}

是否可以输入以上内容以便强制执行以下内容:

  • methodNameobject 的键。
  • object[methodName] 是可调用的,它的参数是 ...args
  • whatever(object, methodName, args) 的返回类型是 object[methodName](...args) 的返回类型。

我能找到的最接近的是 function.apply 的定义,但它与上面的定义不太一样。

最佳答案

认为这可以解决问题:

function callMethodWithArgs<
  M extends keyof T,
  T extends { [m in M]: (...args: Array<any>) => any },
  F extends T[M]
>(obj: T, methodName: M, args: Parameters<F>) {
  return obj[methodName](...args) as ReturnType<F>;
}

虽然需要 TS 3!

关于typescript - 使用参数调用对象的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129289/

相关文章:

css - 如果移动一个或另一个,如何使两个 div 靠在一起

typescript - 错误 : Cannot find module '@vue/cli-plugin-babel/preset'

javascript - TypeScript:VS Code 中的 Array.reduce 函数报告错误

Angular 10 - 注册自定义语言环境

javascript - 如何检查 Angular 4/6 的状态变化?

validation - Angular 2 : How change pristine of NgModel in code?

javascript - 类型 'result' 上不存在属性 'EventTarget'?

javascript - React Typescript - 导入@types/react 和导入react 之间有什么区别

typescript - 从传递函数的返回值推断函数泛型类型 U

angular - 属性 'performance' 在类型 'FirebaseApp' 中缺失,但在类型 'App' 中是必需的