首页 > 解决方案 > 如何使用 typscript 编译器向 typescript 文件中的现有 json 对象添加另一个属性?

问题描述

我有以下文件

const ServerURL = '';
export const URLConfig = {
    ServerURL: ServerURL,
    entityKeyUrl: ServerURL + '/path/to/resource/',
}

现在我想使用 ast/typescript 编译器 API 向该对象添加另一个 url。

我试过什么?

我已经阅读了源文件并从 SourceFile 中提取了文本,但现在我不知道如何使用新文本更新它。

这是我的代码(隐藏代码的其他部分)

const source = getSourceFile(tree, '/path/to/serverurl.constants.ts');
const txt = source.getText();
const closingBrace = txt.lastIndexOf('};');
const aLineAboveClosingBrace = closingBrace - 2;
source.update("Hello", ts.createTextChangeRange(ts.createTextSpan(0, txt.length), "Hello".length + txt.length));

它会导致错误“调试失败,错误表达式”。有人可以指导我吗?

更新 1 我已经能够进行一些字符串操作并能够生成我的文本,但现在能够创建一个文件,我使用ts.createSourceFile但它没有为我生成任何文件。

标签: typescriptabstract-syntax-treetypescript-compiler-api

解决方案


如果您想在编译时更改它,我建议您使用 Transformation API 来做到这一点。

目前 TypeScript 不支持通过 using 使用自定义转换器tsc,但您可以使用ttypescript 之类的工具。请参阅此处以了解自定义转换器应该是什么样的。此外,在 repo 的自述文件中,您可以找到其他自定义转换器的示例(您可以使用其中一个作为起点)。

您可以使用的另一个有用工具是ts-ast-viewer - 它可以帮助您查看 AST 是什么以及如何为代码创建相同(然后修改它)AST。


推荐阅读