什么是打字稿中的`Node`(使用TypeChecker)

时间:2016-01-21 06:10:54

标签: typescript

使用this question的答案作为参考。什么是Node,如何从Node获取Program的实例。

上述问题的答案使用此示例来获取位置的类型信息(这是我想要做的)

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

现在我只是错过了最后一块拼图。什么是Node对象,我会传递到getTypeAtLocation,我将如何获得Node的实例。

1 个答案:

答案 0 :(得分:1)

您可以获得您感兴趣的源文件的顶级节点,如下所示:

const root = program.getSourceFile(fileName);

或者如果您想处理整个批次:

const roots = program.getSourceFiles();

然后你可以递归遍历树:

processNode(root);

function processNode(node: ts.Node) {
   // process this node
   // ....

   // go further down the tree
   ts.forEachChild(node, child => processNode(child));
}

有了这个,您应该可以使用TypeChecker.getSymbolAtLocation()TypeChecker.getTypeAtLocation()之类的方式为您的其他问题设计解决方案。

如果您不需要修改计划处理的源文件,那么编写custom tslint rule可能会更容易。