如何确定作为函数参数的TypeScript.Expression的编译时类型?

时间:2015-07-28 09:58:23

标签: typescript tslint

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

有什么想法吗?

0 个答案:

没有答案