13

我想使用 Typescript,然后使用 Closure Compile(高级编译)来定位 ES5 并缩小输出。

我必须使用tsickle代替 tsc 吗?它缺乏对 tsc 的所有选项的支持,并且雄心勃勃,因为它想将 Typescript 类型转换为 Closure 类型(不是 100% 兼容的)。我真的不需要使用闭包类型;我只需要缩小/属性重命名。

我可以使用 tsc 将 Typescript 编译为 ES6 模块并使用 Closure Compiler 来缩小这些模块(不进行类型检查或基于类型的优化)吗?

奖励:如果我想使用闭包库,这个答案会改变吗?

4

2 回答 2

12

从技术上讲,您可以从 ES6 输出tsc并立即将其通过管道传递给 Closure Compiler,因为后者被指定接受 JS 作为输入。我们已经在很多地方这样做了,例如。使用闭包编译器编译的 Angular 应用程序采用 rxjs 库分发并将其包含在闭包包中。见https://github.com/angular/closure-demo

在实践中,我们找到了一些理由在 Closure 看到之前使用 tsickle 之类的东西来转换 JS。

  • 枚举发射在闭包(或汇总 IIUC)中不起作用
  • Closure 对 ES6 有一些限制,例如它目前不支持export *- tsickle 将其重写为export {each, visible, symbol}
  • 添加 JSDoc 注释有助于闭包理解代码的结构,这可以改进优化并减少它打印的警告数量。

我们目前的计划是将 tsickle 分解为多个 TS 2.3 的 emit 转换,然后我们可以更清楚哪些转换实际上需要在编译器中启用。

添加类型是可选的。如果您关闭 tsickle 的类型化模式,我们将只打印{?}类型。但是,如果您想使用闭包 JS 代码的 TypeScript 输出,那么您会希望闭包类型检查器知道类型。

如果您喜欢新的构建工具,我们将在某个时候将 tsickle 构建到https://github.com/bazelbuild/rules_typescript中的 Bazel 工具链中。同时,您可以为 Tsickle 的 main 提交功能请求以支持更多命令行标志。(但我认为 Lucidchart 已经维护了 Tsickle 的一个分支?)

于 2017-07-14T16:28:52.607 回答
4

我意识到我迟到了,但是关于 Closure 库:现在有一个最新版本的 Closure 库的活动分支,它有

  • 打字稿定义 (.d.ts) 文件
  • 内部使用 ES6 代码而不是自定义的 goog.require、goog.define(因此不依赖于 Closure 编译器)
于 2020-04-22T13:41:52.380 回答