繁体   English   中英

如何从方法签名返回类型获取泛型类型

[英]How to get generic type from a method signature return type

给出一个打字稿文件,如:

export interface Service {
  execute(): Promise<number>;
}

如何获取所有方法及其返回类型的列表。

目前我正在尝试使用typescript编译器API来实现这一目标。 但我对'仿制药'有困难。

到目前为止,我有以下代码,但我无法弄清楚如何获得Promise的'数字'类型。

let program = ts.createProgram(['./something.ts'], {});
let typeChecker = program.getTypeChecker();

for (const sourceFile of program.getSourceFiles()) {
  sourceFile.forEachChild((node: ts.Node) => {
    // I filter to make sure I've the InterfaceDeclaration.

    var interfaceDeclaration: ts.InterfaceDeclaration = node;
    interfaceDeclaration.forEachChild((child) => {    
      // I make sure it is a Method Signature.

      var method : ts.MethodSignature = child;
      var signature = typeChecker.getSignatureFromDeclaration(method);
      var returnType = typeChecker.getReturnTypeOfSignature(signature);
      var parameters = method.parameters;

      console.log("name: " + method.name.getText());
      console.log("return type: " + returnType.symbol.getName());
      console.log("parameters: " + parameters);
    })
  })
}

哪个印刷品:

  name: execute
  return type: Promise
  parameters: []

如何获得Promise中的数字类型?

这种情况下的类型是ts.TypeReference ,因此promise中的数字类型将位于该类型的typeArguments数组属性中。

const returnType = typeChecker.getReturnTypeOfSignature(signature) as ts.TypeReference;

console.log(returnType.typeArguments![0]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM