0

使用 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 分析父节点,直到找到正确的定义。但这是个坏主意。必须有更简单的方法。

有任何想法吗?

4

0 回答 0