如何确定TypeScript.Expression对象的结果类型?

时间:2015-07-27 22:25:42

标签: typescript tslint

使用TypeScript抽象语法树时,如何确定TypeScript.Expression对象的结果类型?

我正在使用TSLint并尝试查找不传递Function类型的对象作为第一个参数的setTimeout的调用。例如,在下面的代码中,我想知道调用了setTimeout并且第一个参数是一个函数。

// function that produces a function
var createFunction : () => (() => void) = () => {}; 
// result of createFunction() should be of type function
setTimeout(createFunction());

AST排队如下:

  • setTimeout - > TypeScript.CallExpression
  • createFunction() - > TypeScript.Expression

我尝试使用LanguageService来确定Expression的类型,但以下API都不能满足我的需要:

  • languageServices.getQuickInfoAtPosition
  • languageServices.getDefinitionAtPosition
  • languageServices.getTypeDefinitionAtPosition

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

语言服务本身并不公开这些信息。

您可以使用类型检查器执行此操作。从program获得createProgram对象后,请写:

        let typeChecker = program.getTypeChecker();
        let type = typeChecker.getTypeAtLocation(node);