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();