typescriptyeomanjscodeshift

How can I parse, modify, and regenerate the AST of a TypeScript file (like jscodeshift)?


My use case: I'm building a Yeoman generator, that modifies TypeScript files; in ways similar to:

Yeoman recommends using an AST parser for this task:

The most reliable way to do so is to parse the file AST (abstract syntax tree) and edit it.

Tools like jscodeshift make this fairly straightforward for JavaScript files, but it doesn't appear to support TypeScript. Are there any similar tools to parse and modify the AST of a TypeScript file?


Solution

  • Does ts-simple-ast fit your needs?

    import { Project } from "ts-simple-ast";
    
    const project = new Project();
    
    // ...lots of code here that manipulates, copies, moves, and deletes files...
    const sourceFile = project.getSourceFile("Models/Person.ts");
    const importDeclaration = sourceFile.addImportDeclaration({
      defaultImport: "MyClass",
      moduleSpecifier: "./file"
    });
    
    // when you're all done, call this and it will save everything to the file system
    project.save();
    

    https://github.com/dsherret/ts-simple-ast

    https://dsherret.github.io/ts-simple-ast/

    https://dsherret.github.io/ts-simple-ast/setup/ast-viewers

    https://dsherret.github.io/ts-simple-ast/manipulation/