通过Typescript的Compiler-api访问符号表

时间:2018-11-04 13:16:14

标签: typescript typescript-compiler-api

我正在尝试在打字稿程序中构建变量定义和用法的图形。

我使用打字稿的compiler-api实现了这一目标。通过玩一会儿,我发现每个节点都与一个Symbol对象相关联,该对象与此symbolFlag相关联。从symbolFlag对象访问此Node的正确方法是什么?

这是我到目前为止尝试过的-

function get_variable_names(node: ts.Node, pgm: ts.Program): void{
        var nodes: ts.Node[] = [];
        function getNodes(sf: ts.Node): ts.Node[] {
            var nodes: ts.Node[] = [];
            function allNodes(n: ts.Node) {
                ts.forEachChild(n, n => { nodes.push(n); allNodes(n); return false; })
            };
            allNodes(sf);
            return nodes;
        }
        var id_nodes = getNodes(node).filter(n => n.kind === ts.SyntaxKind.Identifier);
        const checker = pgm.getTypeChecker()
        const names = id_nodes.map(n => (checker.getSymbolAtLocation(n).getDeclarations()));
        // Not really sure here.
        console.log(names);
    }

此外,我收到一个编译错误,提示Cannot read property 'getDeclarations' of undefined

此外,我意识到我可以手动构造一个图形,如果对于每个标识符,我查看其符号信息并收集其声明位置,则可以推断出它是否是变量。

但是有没有更快的方法来实现这一目标?我怀疑这是一种内置方法吗?在文档中找不到它。

1 个答案:

答案 0 :(得分:0)

我认为我打开here的GH问题中的答案可能会对您有所帮助。