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