【发布时间】:2019-12-12 05:14:38
【问题描述】:
如果引用是静态定义的(不是动态创建的),TypeScript 编译器 API 是否提供了一种轻松序列化节点及其依赖项的方法?
例如:
file-a.ts
export const a = () => {
console.log("a");
}
file-b.ts
import { a } from "./file-a"
const b = () => {
a()
console.log("b")
}
当我遇到file-b 的b 声明时,我想将其提取并打印成这样:
const b = () => {
(() => {
console.log("a")
})()
console.log("b")
}
...如果进行这种序列化不是编译器 API 的一项功能,是否需要遍历和内联所有声明?还是有更好的方法?
【问题讨论】:
-
这是在原地修改 TypeScript 文件吗——可以直接编辑文本吗?还是在发出代码之前通过转换 api 完成?另外,你会有类型检查器吗?
-
是的,我会有一个 TypeChecker。不,不是在原地修改 TypeScript 文件。它用于解决方案构建器。目标是创建一个新的源文件(我们用它做什么并不重要)。新的源文件将仅包含您希望序列化的节点(在本例中为
b),以及内联的任何可静态分析的依赖项...这些可能需要从其他源文件中提取)。
标签: typescript abstract-syntax-tree typescript-compiler-api