typescript - 如何使用 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
但它没有为我生成任何文件。
解决方案
如果您想在编译时更改它,我建议您使用 Transformation API 来做到这一点。
目前 TypeScript 不支持通过 using 使用自定义转换器tsc
,但您可以使用ttypescript 之类的工具。请参阅此处以了解自定义转换器应该是什么样的。此外,在 repo 的自述文件中,您可以找到其他自定义转换器的示例(您可以使用其中一个作为起点)。
您可以使用的另一个有用工具是ts-ast-viewer - 它可以帮助您查看 AST 是什么以及如何为代码创建相同(然后修改它)AST。
推荐阅读
- flutter - Flutter Firebase 身份验证:启动延迟
- ios - UITextField 上下文菜单(剪切、粘贴等)未显示
- c++ - 'std::system_error',生产者消费者 C++ 并发
- c++ - 用户定义类的运算符重载在 C++ 中不起作用
- r - 数据抓取自动更新最新数据集
- python - 我可以在 Windows 中压缩与 AWS Lambda 兼容的文件夹吗?
- sql - sql - 如果在其他地方也没有定义,则只需要列中具有 NULL 的行
- visual-studio-code - 如何获取workbench.view.debug的vscode TreeView实例
- mongodb - Mongo 查找四舍五入的日期
- sorting - 使用与 SAS 中另一列中的值相对应的日期列