【问题标题】:How to generate global property access expression with the Typescript Compiler API?如何使用 Typescript Compiler API 生成全局属性访问表达式?
【发布时间】:2019-03-18 20:31:14
【问题描述】:

我正在尝试使用compiler api 生成一些打字稿代码。不幸的是,官方(或任何与此相关的)文档很少,我现在完全被困在一个非常简单的任务上:

我想生成一个简单的函数调用,例如foo()。就是这样,一个简单的全局函数调用。

经过长时间的搜索,我已经走到了这一步:

import ts from 'typescript'

ts.createCall(
    ts.createPropertyAccess(
        *some expression*,
        'foo'
    ),
    undefined, //generics
    [], //parameters
);

据我了解,我需要将一个表达式传递给createPropertyAccess,使其成为所访问属性的“所有者”(例如foo.bar 中的foo)。但是,在这种情况下,没有“所有者”,因为该函数位于全局范围内。

有没有办法生成这样的函数调用?我尝试使用ts.createOmittedExpression,但生成了以下代码:

().bar();

【问题讨论】:

    标签: typescript typescript-compiler-api


    【解决方案1】:

    在这种情况下,您可以只使用ts.createIdentifier。 foo() 中没有属性访问表达式。

    const statement = ts.createExpressionStatement(
        ts.createCall(ts.createIdentifier("foo"), undefined, undefined)
    );
    

    顺便说一下,看看我的网站ts-ast-viewer。现在它将显示将在编辑器中创建代码的编译器 API 代码。

    【讨论】:

    • 非常感谢!我完全忽略了标识符也是表达式的事实。有时 AST 有太多类型/选项,以至于我无法弄清楚我需要使用的那个。到目前为止,您的网站在这方面提供了很多帮助,我非常感谢您。
    • @superbadcodemonkey 没问题!我很高兴这很有帮助。顺便看看我刚刚在 ts-ast-viewer 中实现的这个功能。这对你很有用:github.com/dsherret/ts-ast-viewer/issues/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多