Wou*_*ter 3 typescript typescript-compiler-api
给定一个打字稿文件,如:
export interface Service {
execute(): Promise<number>;
}
Run Code Online (Sandbox Code Playgroud)
如何获取所有方法及其返回类型的列表。
目前我正在尝试使用打字稿编译器 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);
})
})
}
Run Code Online (Sandbox Code Playgroud)
哪个打印:
name: execute
return type: Promise
parameters: []
Run Code Online (Sandbox Code Playgroud)
如何获取 Promise 中的数字类型?
这种情况下的类型是 a ts.TypeReference,因此承诺中的数字类型将在typeArguments该类型的数组属性中。
const returnType = typeChecker.getReturnTypeOfSignature(signature) as ts.TypeReference;
console.log(returnType.typeArguments![0]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |