ts-morph
Module / Namespace Declarations
Module declarations may look like any of the following:
namespace MyNamespace {
}
module MyModule {
}
declare module "some-module" {
}
declare module "other-module";
They can be retrieved from source files or other modules/namespaces:
const modules = sourceFile.getModules();
const namespace1 = sourceFile.getModule("Namespace1");
const firstNamespaceWithClass = sourceFile.getModule(n => n.getClasses().length > 0);
Most of the information you can get about namespaces is covered in other sections.
Note: Although it's a compile error, you can also retrieve namespaces from function bodies.
Add/Insert
Add or insert namespaces to a source file, namespace, or function like declarations by calling addModule()
, addModules()
, insertModule()
, or insertModules()
.
const moduleDeclaration = sourceFile.addModule({
name: "ModuleName",
});
Remove
Call .remove()
:
moduleDeclaration.remove();
Module, namespace, or global
?
Check for the declaration kind or keywords:
moduleDeclaration.getDeclarationKind(); // returns: ModuleDeclarationKind
// or
moduleDeclaration.hasModuleKeyword(); // returns: boolean
moduleDeclaration.hasNamespaceKeyword(); // returns: boolean
Or set the declaration kind:
moduleDeclaration.setDeclarationKind(ModuleDeclarationKind.Namespace);
moduleDeclaration.setDeclarationKind(ModuleDeclarationKind.Module);
moduleDeclaration.setDeclarationKind(ModuleDeclarationKind.Global);
Or get the keyword:
// returns: the module or namespace keyword or undefined if global
moduleDeclaration.getDeclarationKindKeyword();
Reminder: Module declarations that are global
have the following syntax:
declare module "my-library" {
// this is a global namespace declaration
global {
const foo: string;
}
}
Unwrap
A module declaration can be replaced with its body using the .unwrap()
method.
Given the following code:
namespace MyNamespace {
function someFunction() {
}
class SomeClass {
}
}
Calling .unwrap()
will change the code to the following:
function someFunction() {
}
class SomeClass {
}