Closure Compiler + Typescript

16
我想使用Typescript,然后使用Closure Compile(高级编译)来定位ES5并缩小输出。
我必须在tsc的位置使用tsickle吗?它不支持tsc拥有的所有选项,并且它的野心很大,因为它想将Typescript类型转换为Closure类型(这些类型不是100%兼容)。我不需要使用Closure类型; 我只需要缩小/属性重命名。
我可以使用tsc将Typescript编译为ES6模块,并使用Closure Compiler对其进行缩小处理(而无需进行类型检查或基于类型的优化)吗?
奖励:如果我想使用Closure Library,这个答案会改变吗?

只有一个Angular核心开发者才能够正确回答这个问题。 - Chad Killingsworth
@ChadKillingsworth,尽管这不是一个Angular应用程序。 - Paul Draper
我知道-但他们是我所知道的唯一理解到这个层次的开发者。TypeScript编译器、TSickle和Closure编译器-这是一个非常具体的知识集合。而且这是一个非常不平凡的问题。 - Chad Killingsworth
有道理。 :/ - Paul Draper
2个回答

13

从技术上讲,您可以将tsc的ES6输出直接传输到Closure Compiler中,因为后者被规定接受JS作为输入。我们在许多地方已经这样做了,例如使用Closure编译的Angular应用程序使用rxjs库分布,并将其包含在闭包包中。请参见https://github.com/angular/closure-demo

实践中,我们发现使用类似tsickle这样的工具在Closure看到JS之前进行转换有一些原因。

  • 枚举的发射不能在Closure(或rollup IIUC)中工作
  • Closure在ES6方面有一些限制,例如它目前不支持export *——tsickle将其重写为export {each, visible, symbol}
  • 添加JSDoc注释有助于closure理解代码结构,从而可以改进优化并减少打印的警告数量。

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

添加类型是可选的。如果关闭tsickle的类型模式,我们只会打印类型的{?}。但是,如果您想从闭包JS代码中使用TypeScript的输出,则需要让闭包类型检查器知道这些类型。

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


我们是这样的 :) 另外,bazel看起来很不错,虽然我们还没有使用它。自从它第一次发布路线图以来,我一直在关注它。 - Paul Draper
嘿 @Alex,你知道这个的当前情况吗?谢谢! - marcelocra

4
我意识到我来晚了,但关于Closure库: 现在有一个更新的版本的Closure库的活跃分支,它具有以下特点:
  • Typescript定义(.d.ts)文件
  • 使用ES6代码而不是自定义的goog.require、goog.define内部实现(所以不依赖Closure编译器)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接