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相关问答推荐

如何一般设置映射类型的值

为什么在TypScript中将类型守护的返回类型写成This is(

错误:note_modules/@types/note/globals.d.ts:72:13 -错误TS 2403:后续变量声明必须具有相同的类型

如何从TypScript中的接口中正确获取特定键类型的所有属性?

如何使用属性作为具有Generics的TypScript类中的类型守护?

JS Redux Devtools扩展不工作

如果存在ts—mock—imports,我们是否需要typescpt中的IoC容器

对深度对象键/路径进行适当的智能感知和类型判断,作为函数参数,而不会触发递归类型限制器

扩展函数签名中的参数类型,而不使用泛型

获取函数中具有动态泛型的函数的参数

Angular 17子路由

使用Redux Saga操作通道对操作进行排序不起作用

在Cypress中,是否可以在不标识错误的情况下对元素调用.Click()方法?

为什么&Quot;元素隐式具有';Any';类型,因为...即使我已经打字了,也不能作为索引显示错误吗?

如何使用泛型函数参数定义类型脚本函数

VUE 3类型';字符串';不可分配给类型';参考<;字符串&>

如何在Reaction Native中关注屏幕时正确更新状态变量?

为什么我会得到一个;并不是所有的代码路径都返回一个值0;switch 中的所有情况何时返回或抛出?(来自vsCode/TypeScript)

React Context TypeScript错误:属性';firstName';在类型';iCards|iSearch';

记录的子类型<;字符串,X>;没有索引签名