Nex*_*exx 5 typescript-compiler-api
我目前正在使用打字稿转换器 api,我发现它node.parent是未定义的。
我的代码是:
const transformerFactory: ts.TransformerFactory<ts.Node> = (
context: ts.TransformationContext
) => {
return (rootNode) => {
function visit(node: ts.Node): ts.Node {
node = ts.visitEachChild(node, visit, context);
// HERE node.parent IS UNDEFINED !
return filterFn(node, context);
}
return ts.visitNode(rootNode, visit);
};
};
const transformationResult = ts.transform(
sourceFile, [transformerFactory]
);
Run Code Online (Sandbox Code Playgroud)
如何找到该节点的父节点?
您可以解析指定设置父节点:
const sourceFile = ts.createSourceFile(
"fileName.ts",
"class Test {}",
ts.ScriptTarget.Latest,
/* setParentNodes */ true, // specify this as true
);
Run Code Online (Sandbox Code Playgroud)
或者对节点执行一些操作以使其设置其父节点(例如,类型检查程序... IIRC 在绑定期间确保设置父节点)。
根据评论更新
如果您是从程序创建这些,那么您可以执行以下操作:
const options: ts.CompilerOptions = { allowJs: true };
const compilerHost = ts.createCompilerHost(options, /* setParentNodes */ true);
const program = ts.createProgram([this.filePath], options, compilerHost);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |