【问题标题】:Is there a way to identify a variable declaration kind using the Compiler API?有没有办法使用编译器 API 来识别变量声明类型?
【发布时间】:2021-11-11 01:20:08
【问题描述】:

我正在使用 Compiler API 来搜索一些(主要)用 JavaScript 编写的结构。有什么方法可以推断变量声明是否使用const(或const 断言)、varlet 语句?例如,在这段代码中:

const a = 1;

当我使用AST Explorer 时,我可以在VariableDeclarationList 节点内看到一个值为2flags 属性,但是当我使用编译器API 进行解析时,该属性假定一个不同的值。我试图将flags 属性与ts.NodeFlags.Const 进行比较,但它总是导致错误。我正在使用 Typescript 4.4.3。

【问题讨论】:

    标签: typescript typescript-compiler-api


    【解决方案1】:

    使用 AST Explorer 时,我可以在 VariableDeclarationList 节点内看到值为 2 的 flags 属性,但当我使用 Compiler API 进行解析时,此属性假定为不同的值。我试图将 flags 属性与 ts.NodeFlags.Const 进行比较,但它总是导致 false。

    这正是您执行此操作的方式。确保使用bitwise operators检查标志:

    const sourceFile = ts.createSourceFile("file.ts", "const a = 1;");
    const varStmt = sourceFile.statements[0] as ts.VariableStatement;
    const isConst = (varStmt.declarationList.flags & ts.NodeFlags.Const) !== 0;
    
    console.log(isConst); // true
    

    【讨论】:

    • 成功了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多