该文章将基于已有的TypeScript语言,概括该语言的设计原则。该文章不会毛举缕析的将所有的原则列举出来,而是将我们在决定语言形态过程中所使用的规则总结出来。其中的一些规则难免主观,甚至会相互矛盾。设计一个成功程序语言的本质,其实就是在矛盾中找到平衡并作出正确的选择。
推荐阅读TypeScript语言标准的第一章,其中可以找到TypeScript语言的设计背景,以及如何将这些目标实现。
- 基于静态结构的分析很可能是错误的。
- 对于大段的代码提供结构化机制。
- 对于发行版本的代码,没有运行时开销。
- 发行清洁的,符合语言习惯的,可辨认的JavaScript代码。(译者注:这里的发行指通过编译器编译后产生的JavaScript代码。)
- 生产出可组合,易于推导的语言。(译者注:这里的生产出的指的是产出TypeScript语言本身。)
- 遵循当前以及未来出现的ECMAScript规范。
- 保存所有JavaScript代码在运行时的行为。
- 避免增加表达式等级的语法。
- 使用一致的,完全可擦除,结构性的类型系统。
- 有跨平台的开发工具。
- 从TypeScript 1.0版本开始不会有重大的变更。
- 完全模仿现有的设计语言。相反的,使用JavaScript语言的行为以及程序作者的设计意图作为参考,以最合理的方式设计TypeScript。
- 积极优化程序的运行时效率。相反的,发布符合语言习惯的JavaScript代码,使用运行平台的性能特征。
- 应用一个“正确性可验证”的类型系统。相反的, 在正确性和生产效率上达到平衡。
- 提供一个“端到端”的构建管道。相反的,保证系统的扩展性以便其他的外部工具可以使用构建器在更加复杂的构建流中使用。
- 添加或者依赖运行时程序的类型信息,或者基于不同类型系统的返回结果发布不同的代码。相反的,鼓励不依赖运行时元数据的编程模式。
- 提供额外的运行时功能或者工具库。相反的,使用TypeScript描述现有的工具库。(译者注:通过.d.ts文件可以对现有的外部库进行描述并应用到TypeScript中。)
- 语言行为会让用户感到出人意料或者无法接受。相反的,在语言的设计上考虑了其他常用语言的模式。