ts-morph

Decorators

Decorators can be retrieved from class related nodes by calling the getDecorators() method.

const decorators = classDeclaration.getDecorators();

Name

Get the name or fully qualified name of a decorator by using the getName() or getFullName() functions respectively.

For example, given the following code:

@obj.decorator
class Identifier {
}

The following happens:

decorator.getName(); // "decorator"
decorator.getFullName(); // "obj.decorator"

Decorator factory

Decorators with parenthesis (ex. @decorator(3)) are decorator factories, while decorators without (ex. @decorator) are not.

decorator.isDecoratorFactory(); // returns: boolean

Set as a decorator factory or not:

decorator.setIsDecoratorFactory(true);

Arguments

Get the decorator's arguments by calling .getArguments():

const args = decorator.getArguments(); // returns: Expression[]

Add and insert via .addArgument(...), .insertArguments(...), .addArgument(...), or .addArguments(...).

const args = decorator.insertArguments(1, ["5", "6"]);

And remove them by calling .removeArgument():

// specify the index
decorator.removeArgument(0);
// or specify the argument node
decorator.removeArgument(args[0]);

Type arguments

Get the decorator's type arguments by calling .getTypeArguments():

const typeArgs = decorator.getTypeArguments(); // returns: TypeNode[]

Add and insert via .insertTypeArgument(...), .insertTypeArguments(...), .addTypeArgument(...), or .addTypeArguments(...).

const typeArgs = decorator.insertTypeArguments(1, ["string", "number"]);

And remove them by calling .removeTypeArgument():

// specify the index
decorator.removeTypeArgument(0);
// or specify the type argument node
decorator.removeTypeArgument(typeArgs[0]);

Call expression

Decorator factories are call expressions. Get the call expression by calling:

const callExpression = decorator.getCallExpression(); // returns: CallExpression | undefined

Add/Insert decorators

Decorators can be added or inserted by calling addDecorator(decorator), addDecorators(decorators), insertDecorator(index, decorator), or insertDecorators(index, decorators).

For example:

classDeclaration.addDecorator({
  name: "MyDecorator",
  arguments: ["3", `"some string"`],
});

Remove decorators

Call .remove():

decorator.remove();