使用TypeScript抽象语法树时,如何确定作为函数参数提供的TypeScript.Expression的编译时类型?
在下面的代码中,我想知道传递给setTimeout的参数的类型。
function invoke(functionArg : () => void) {
setTimeout(functionArg);
}
AST排队如下:
setTimeout -> TypeScript.CallExpression
functionArg -> TypeScript.SyntaxKind.Identifier
我已经尝试了几种获取此信息的方法,但TypeChecker会将类型报告为' any'。
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分析父节点,直到找到正确的定义。但这是个坏主意。必须有一个更简单的方法。
有什么想法吗?