闭包编译器+打字稿

Pau*_*per 12 google-closure-compiler typescript es6-modules tsickle

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

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

我可以使用tsc将Typescript编译为ES6模块并使用Closure Compiler来缩小它们(没有类型检查或基于类型的优化)吗?

额外奖励:如果我想使用Closure Library,这个答案会改变吗?

Ale*_*gle 11

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

在实践中,我们发现在Closure看到之前使用像tsickle这样的东西来改造JS的一些原因.

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

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

添加类型是可选的.如果您关闭tsickle的键入模式,我们只会打印{?}类型.但是,如果您想要从闭包JS代码中使用TypeScript的输出,那么您将需要闭包类型检查器来了解类型.

如果你是游戏的一个新的构建工具,我们将建立tsickle到巴泽尔工具链中https://github.com/bazelbuild/rules_typescript在一些点.在此期间,您可以为Tsickle的main提交功能请求,以支持更多的命令行标志.(但我认为Lucidchart已经维持了Tsickle的一个分支?)