如何在TypeScript中获得类型的方法名?

如何在TypeScript中获得类型的方法名?,typescript,typescript-generics,Typescript,Typescript Generics,我正在构建一个包装器,将回调语法函数转换为async/await,如下所示: 函数操作( obj:D, 方法名称:M, …args:参数 ):承诺{ 返回新承诺((解决、拒绝)=>{ 返回obj[methodName](…args,(err,result)=>err?reject(err):resolve(result)); }); } 这是可行的,但问题是我可以传递到methodName的参数不仅包括D的方法名称,还包括属性(即变量属性)。是否有任何方法可以使F只能是D类型的函数的属性 谢谢

我正在构建一个包装器,将回调语法函数转换为async/await,如下所示:

函数操作(
obj:D,
方法名称:M,
…args:参数
):承诺{
返回新承诺((解决、拒绝)=>{
返回obj[methodName](…args,(err,result)=>err?reject(err):resolve(result));
});
}
这是可行的,但问题是我可以传递到
methodName
的参数不仅包括
D
的方法名称,还包括属性(即变量属性)。是否有任何方法可以使
F
只能是
D
类型的
函数的属性


谢谢

您可以获取引用函数的对象的键,例如:

type MethodNames<T extends { [K in keyof T]: any }> = {
  [K in keyof T]:
    T[K] extends Function // is this key a function?
      ? K // yes, return the key
      : never // no, return never
}[keyof T] // get union of all values (which are now the keys) that are not never

interface A {
  value: string
  fn1(): void
  fn2(): void
}

type B = MethodNames<A> // "fn1" | "fn2"
现在,typescript将确保
M
D
的一个键,而
函数的类型是

M extends MethodNames<D>