如何使用开源 Typescript 编译器代码提取给定 Typescript 代码的 AST?

Ahm*_*aza 6 abstract-syntax-tree typescript

众所周知,Typescript 现在是完全开源的。可在Tyescript 获得。我正在构建一个应用程序,它将获取 Typescript 代码作为输入并输出给定​​代码的 AST。为我提供一种正确的方法来提取输入 Typescript 代码的 AST(抽象语法树),而不是编译它并将其转换为 Javascript。

Dav*_*ret 6

基本代码:

const fileNames = ["C:\\MyFile.ts"];
const compilerOptions: ts.CompilerOptions = {
    // compiler options go here if any...
    // look at ts.CompilerOptions to see what's available
};
const program = ts.createProgram(fileNames, compilerOptions);
const typeChecker = program.getTypeChecker();
const sourceFiles = program.getSourceFiles();

sourceFiles.filter(f => /MyFile\.ts$/.test(f.fileName)).forEach(sourceFile => {
    ts.forEachChild(sourceFile, node => {
        const declaration = node as ts.Declaration;
        if (declaration.name) {
            console.log(declaration.name.getText());
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

所以如果你提供了一个C:\MyFile.ts喜欢的:

class MyClass {}
interface MyInterface {}
Run Code Online (Sandbox Code Playgroud)

它会输出MyClassMyInterface

弄清楚我刚刚展示的内容之外的所有内容需要大量工作。查看和/或帮助您为这项正在进行的工作做出贡献可能对您更有益。