ts-simple-ast

Imports

Imports of a source file can be retrieved by calling:

// get them all
const imports = sourceFile.getImportDeclarations();
// or get the first one that matches a condition
const importWithDefaultImport = sourceFile.getImportDeclaration(i => i.getDefaultImport() != null);

Add/Insert

Add or insert use insertImportDeclaration, insertImportDeclarations, addImportDeclaration, or addImportDeclarations:

const importDeclaration = sourceFile.addImportDeclaration({
    defaultImport: "MyClass",
    moduleSpecifier: "./file"
});

Remove

Call .remove():

importDeclaration.remove();

Module specifier

Get it:

const moduleSpecifier = importDeclaration.getModuleSpecifier(); // returns: StringLiteral

Or get it's value:

const moduleSpecifierValue = importDeclaration.getModuleSpecifierValue(); // returns: string

Example: For import settings from "./settings"; would return ./settings.

Set it:

importDeclaration.setModuleSpecifier("./new-file");
// or set by source file
importDeclaration.setModuleSpecifier(sourceFile);

Get the referenced source file:

const sourceFile = importDeclaration.getModuleSpecifierSourceFile(); // returns: SourceFile | undefined

Get if the module specifier is relative (starts with ./ or ../):

importDeclaration.isModuleSpecifierRelative();

Default import

Get it:

const defaultImport = importDeclaration.getDefaultImport(); // returns: Identifier | undefined

Set it:

importDeclaration.setDefaultImport("MyClass");

Example

Given the file:

import MyClass from "./file";

const instance = new MyClass();

Doing the following:

const importDeclaration = sourceFile.getImportDeclarations()[0];
importDeclaration.setDefaultImport("NewName");

Will rename the default import and all its usages:

import NewName from "./file";

const instance = new NewName();

Namespace import

Get it:

const namespaceImport = importDeclaration.getNamespaceImport(); // returns: Identifier | undefined

Set it:

importDeclaration.setNamespaceImport("newName");

Note: Setting the namespace import for an existing namespace import will rename any uses of the namespace import in the current file.

Named imports

Getting a named import:

const namedImports = importDeclaration.getNamedImports(); // returns: ImportSpecifier

Adding or inserting named imports can be done via the addNamedImport, addNamedImports, insertNamedImport, or insertNamedImports methods.

const namedImport = importDeclaration.addNamedImport({
    name: "MyClass",
    alias: "MyAliasName" // alias is optional
});
// or
importDeclaration.addNamedImports(["MyClass", "SomeInterface"]);

Removing one named import:

namedImport.remove();

Removing all named imports:

importDeclaration.removeNamedImports();

Import specifier

Import specifiers are the individual named imports.

Name
namedImport.getNameNode(); // returns: Identifier
namedImport.setName("NewName");
namedImport.renameName("NewName");
Alias
namedImport.getAliasIdentifier(); // returns: Identifier | undefined
namedImport.setAlias("NewAliasName");

Note: Setting the alias will rename any uses of the alias or identifier in the current file to the new value.

Parent import declaration
namedImport.getImportDeclaration(); // returns: ImportDeclaration