Tsickle:连接TypeScript与Closure Compiler的桥梁
tsickleTsickle — TypeScript to Closure Translator项目地址:https://gitcode.com/gh_mirrors/ts/tsickle
Tsickle 是一个强大的工具,它能将TypeScript代码转换为符合Google Closure Compiler要求的形式。这意味着你可以利用TypeScript的强大类型系统编写源码,然后借助Closure Compiler进行打包和优化,从而在保持代码整洁的同时,享受性能优化的优势。
项目介绍
Tsickle的主要任务是将源码中的各种元素转换成Closure Compiler可以识别的形式,如插入兼容的JSDoc注解,将ES6模块转化为goog.module
模块,生成externs.js
文件,处理类成员变量的类型声明,转换export * from ...
语法,以及将TypeScript枚举转换为Closure接受的格式等。 Tsickle的目标是在保持源码合法性的前提下,使之适应Closure Compiler的编译需求,即使最终输出的代码可能不是那么“美观”。
重要提示:不提供全面支持 虽然Google内部广泛使用Tsickle(包括在Angular应用中),但对外部其他JavaScript生态系统,我们并没有提供官方支持。
使用方法
Tsickle是一个库,设计用于与其他处理TypeScript和Closure Compiler的程序集成。例如:
- 在Google内部,Tsickle被嵌入到Bazel构建系统中。这部分代码作为开放源代码发布,作为Bazel的Node.js/TypeScript构建规则的一部分。
- tscc是一个封装了Tsickle和Closure Compiler的工具,并且能够与rollup配合工作。
- 我们还发布了一个简单的演示程序,位于
demo/
子目录下。
设计细节
输出格式
为了满足Closure Compiler的要求,Tsickle可能会产生一些人类阅读起来不太友好的代码。例如,它会生成特定于Closure的类型语法,如{!Foo}
表示非空的Foo类型,以及使用@typedef
标记的类型别名。此外,它还会将模块以Closure的goog.module
格式导出,这种格式与ES模块类似但并不完全相同。
TypeScipt与Closure的差异
尽管TypeScript和Closure有很多相似之处,但在某些地方仍存在差异。Tsickle尽量隐藏这些差异,但是用户还是需要了解以下几点:
declare
.d.ts
文件中的任何声明,以及带有declare
标签的声明,会被Tsickle识别为应当在Closure编译过程中保留名称的元素。当对象从外部导入或传出程序时,这个特性尤为重要,因为它确保字段的具体字符串名称不会被重命名。
出口装饰器
带有@ExportDecoratedItems
注释的装饰器表示其修饰的元素的名称应通过Closure编译过程得到保留,并应用@export
标签。
开发者信息
- 需要安装Node.js和Yarn。可以通过操作系统包管理器或者按照npm和yarnpkg官网说明来安装。
- 运行
yarn
以安装依赖。 - 使用
yarn build
构建代码,tsc --watch
进行持续构建,yarn test
运行单元测试、端对端测试并检查代码风格。
总结
Tsickle是一个强大的工具,可以帮助开发者充分利用TypeScript的强类型特性,同时受益于Closure Compiler的优化功能。无论是Google内部的大型项目,还是小型独立项目,Tsickle都是一个值得信赖的中间件。然而,请务必注意,如果在非Google生态系统的环境中使用,可能需要额外的技术支持和适配工作。
tsickleTsickle — TypeScript to Closure Translator项目地址:https://gitcode.com/gh_mirrors/ts/tsickle