如何在TypeScript中获得类型的方法名?
我正在构建一个包装器,将回调语法函数转换为async/await,如下所示:如何在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类型的函数的属性 谢谢
函数操作(
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>