使用this question的答案作为参考。什么是Node
,如何从Node
获取Program
的实例。
上述问题的答案使用此示例来获取位置的类型信息(这是我想要做的)
let typeChecker = program.getTypeChecker();
let type = typeChecker.getTypeAtLocation(node);
现在我只是错过了最后一块拼图。什么是Node
对象,我会传递到getTypeAtLocation
,我将如何获得Node
的实例。
答案 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可能会更容易。