如何评价 TypeScript?

关注者
892
被浏览
148569

30 个回答

怒答。


TypeScript 是 JavaScript 的强类型版本。然后在编译期去掉类型和特有语法,生成纯粹的 JavaScript 代码。由于最终在浏览器中运行的仍然是 JavaScript,所以 TypeScript 并不依赖于浏览器的支持,也并不会带来兼容性问题。


TypeScript 是 JavaScript 的超集,这意味着他支持所有的 JavaScript 语法。并在此之上对 JavaScript 添加了一些扩展,如 class / interface / module 等。这样会大大提升代码的可阅读性。

强类型语言的优势在于静态类型检查,具体可以参见 flow.js/typescript 这类定义参数类型的意义何在? - vilicvane 的回答。概括来说主要包括以下几点:

1. 静态类型检查
2. IDE 智能提示
3. 代码重构
4. 可读性


TypeScript 虽然是强类型语言,但是如果对象被声明为了 any 类型,就会忽略所有的类型检查。这种灵活的结构保证了他可以在保证整体有强类型检查优势的同时,在一些细节问题上保持弱类型的灵活。


TypeScript 本身是开源的,这意味着开发者可以自由修改其源代码,同时 TypeScript 的架构设计也很优秀,提供了充分的 API 接口方便开发者进行进一步扩展。顺便说一下,TypeScript 编译器本身是用 TypeScript 开发的。构建流程是先用旧版本的 TypeScirptCompiler.js 将新版本的 TypeScript Language 的 TypeScript源代码编译成新的 TypeScriptCompiler.js,听起来很厉害的样子。


由于其开源性,通过 TypeScript Compiler API,开发者可以自己实现编译器(比如添加增量编译和自动编译,大幅提升编译速度),自定义语法检查,以及自定义输出结构等。 由于编译器核心灵活的结构,开发者只需要简单的添加一些代码,就可以在 IDE 中支持 TypeScript 的诸多特性。


顺便打个广告,白鹭引擎是基于 TypeScript 的开源 HTML5 游戏引擎。白鹭引擎的后续版本会利用这些特性不断完善引擎自身。举例,我们的 IDE Egret Wing 就利用了 TypeScript Service API 实现了了代码智能提示等功能。文档生成工具也是通过扩展 TypeScript Compiler API 实现的。

总结:


我认为 TypeScript 是一项非常值得学习的新技术,由于他是 JavaScript 的超集,对 JavaScript 开发者来说入门门槛很低(相对于 Dart / CoffeeScript 等其他 JavaScript 变种来说 )。


如果一定要找出几个不用 TypeScript的原因。我能想到以下情况:

  1. 需要在 HTML 里大量嵌入 JavaScript 代码,而非 HTML 和 JavaScript 分离。
  2. 熟练运用原型继承,不喜欢 class 关键字
  3. 项目中大量依赖了第三方 JavaScript 类库,并且这些类库没有 .d.ts 文件
  4. “微软雅黑”

有人说:“TypeScript 让 JavaScript 又变成了 Java,而我们不需要另一个 Java,所以我们不需要 TypeScript“。

这样说的人一定不知道,TypeScript 的类型系统中有:

  • Intersection Types
  • Union Types & Discriminated Unions (aka "Algebraic Data Types.")
  • String Literal Types
  • Polymorphic this Types
  • Index Types
  • Mapped Types
  • ...

这些吧。特别是 Generic Types 组合上 Mapped Types 描述能力爆表。

如果你的代码超过 1000 行,而且你不打算浪费时间,那么试试 TypeScript。当然前提是你是有经验的开发人员,如果是编程初学者,建议还是先从 JavaScript 开始。

为什么?