使用 TypeScript 抽象语法树时,如何确定作为函数参数提供的 TypeScript.Expression 的编译时类型?
在下面的代码中,我想知道传递给 setTimeout 的参数的类型。
function invoke(functionArg : () => void) {
setTimeout(functionArg);
}
AST 排列如下:
setTimeout -> TypeScript.CallExpression
functionArg -> TypeScript.SyntaxKind.Identifier
我尝试了几种方法来获取此信息,但 TypeChecker 一直将类型报告为“任何”。
this.languageServices.getDefinitionAtPosition(...).kind // yields 'parameter'
this.languageServices.getTypeDefinitionAtPosition(...).kind // yields ''
this.typeChecker.typeToString(...); // yields 'any'
this.typeChecker.getTypeAtLocation(...).flags // yields any
this.typeChecker.getTypeAtLocation(...).symbol // yields undefined
一个节点有一个父节点……我可以爬上 AST 分析父节点,直到找到正确的定义。但这是个坏主意。必须有更简单的方法。
有任何想法吗?