我正在尝试从某些源文件的AST中删除特定的 Decorator 。
我能够查找装饰器Node
,但是发出的代码仍然包含对__decorate([...])
函数的调用。
以下是变形金刚及其Visitor
。
export default function() {
function createVisitor(
ctx: ts.TransformationContext,
sourceFile: ts.SourceFile
): (node: ts.Node) => ts.VisitResult<ts.Node> {
const visitor: ts.Visitor = (node: ts.Node): ts.VisitResult<any> => {
if (ts.isDecorator(node)) {
if (node.getText(sourceFile) === '@Stateful') {
return undefined;
}
}
return ts.visitEachChild(node, visitor, ctx);
};
return visitor;
}
return (ctx: ts.TransformationContext) => (sourceFile: ts.SourceFile) =>
sourceFile.fileName.endsWith('component.ts')
? ts.visitNode(sourceFile, createVisitor(ctx, sourceFile))
: sourceFile;
}
如您所见,我拦截了@Stateful
个装饰器Node
s
if (ts.isDecorator(node)) {
if (node.getText(sourceFile) === '@Stateful') {
return undefined;
}
}
然后我通过返回Node
来删除AST undefined
。
但是,尽管有一个空数组
__decorate
函数
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
...
};
import { Stateful } from './test.decorator';
export class Example {
constructor() {
this.str = '';
}
getStr() {
return this.str;
}
}
Example = __decorate([], Example);
我想念什么?