打字稿转换器,“node.parent”未定义

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)

如何找到该节点的父节点?

Dav*_*ret 5

您可以解析指定设置父节点:

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)