走进TypeScript

国内很多技术文章千篇一律,大多从官网复制粘贴,如果要学习TypeScript语法细节,去看官网最好不过了。

本文将从两个不同的角度带你走进TypeScript. 以下简称'TS'.

  1. 用TS有什么好处?
  2. TS的发展前景如何?

首先,看下TS的定义:

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

TypeScript是一个编译到纯JS的有类型定义的JS超集。
TS遵循当前以及未来出现的ECMAScript规范。TS不仅能兼容现有的JavaScript 代码,它也拥有兼容未来版本的JavaScript的能力。大多数TS的新增特性 都是基于未来的JavaScript提案,这意味着许多TS代码在将来很有可能会变成ECMA的标准.

made by 乘着风

2009年微软公司提出了TypeScript的第一个版本,是由C#之父Anders Hejlsberg 领导开发的, 了解C#的同学学起来就幸福了。

TS有什么好处?

TypeScript能从可维护性、健壮性等方面提高代码质量。

说到代码质量,大家有什么提高方法呢? 对于长期迭代的项目,开发和维护的成员会有很多,团队成员水平,风格会有差异,还具有流动性。代码层面上统一规范可以避免一些问题,比如eslint等工具,我们公司的项目就使用了jshint统一规范, 不通过编译不能上线。

常见的代码检查工具:JsHint / JsLint / EsLint
语法级别约束:使用未定义变量,括号未闭合等; 规范/风格级别约束:!= ===, 缩进,未使用的变量, parseInt(第二个参数), (兼容性)
Eslint 这些语法检查的能提前检查出来这些错误,减少了调试的成本,减少了线上bug.

但是还有不足,比如一些参数类型,个数的错误检测不到。
谨慎的程序员会做个判空处理等,来避免这样的错误。如果未处理,在复杂的线上环境中,程序就有可能会崩溃。
而TS可以帮助我们避免这些问题,从而提高代码健壮性, 因为TS是强类型的语言,下面看下它怎样约束类型的。

类型注解

let isDone: boolean = false;

变量后面跟的冒号,后面的类型就是,这个变量的类型注解。类型的注解是可选的,不加就变成了JS,因为TS设计目标就是:兼容JS,减少js迁移TS的成本。

类型 描述
Boolean 与JS相同
Number 与JS相同
String 与JS相同
Array 与JS相同; 增加了泛型数组, 元组(Tuple)
Enum enum类型是为了给一个数字集合更友好地命名
any any类型可以表示任意JavaScript值
void void就是any的对立面,即所有类型都不存在的时候。你会在一个没有返回值的函数看到它

详细用法请参考官网

TS另外一个特点是对面向对象思想进行了增强

接口(Interface)
维基百科对OOP中接口的定义是:
在面向对象的语言中,术语interface经常被用来定义一个不包含数据和逻辑 代码但用函数签名定义了行为的抽象类型。

实现一个接口可以被看作是签署了一份协议。接口好比是协议,当我们签署(实现)它时,必须遵守它的规则。接口的规则是方法和属性的签名,我们必须实现它们。
当我们在程序设计的时候,基类中的所有方法都不用去实现,就可以使用接口来代替类,提高延展性。
格式:

interface 接口名{
      方法的声明:不需要public和其他修饰符,默认是public
}
  • 接口只能被实现,不能实例化。
  • 当类实现接口时,必须将接口当中所有的方法全部实现。
  • 接口可以多实现,在一定程度上弥补了类不能多继承的缺陷,实现多个接口,接口之间使用逗号隔开。

泛型
泛型用来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

  • 使用泛型类型可以最大限度的重用代码,保护类型的安全
  • 降低了强制转换操作的成本或风险
  • 可以对泛型类进行约束以访问特定数据类型的方法

这里就不贴代码,详细用法请参考官网

说了这么多,TS的发展前景如何呢?

纵向对比

made by 乘着风

列举几个跟它属性很相似的几位,他们都是需要编译的,编译结果都是js.

  • CoffeeScript 目的是让Js更简洁,优美,提高可读性,但没有像TS一样利用类型检测提高代码健壮性,而且自从有了ES6,CoffeeScript在业界的声音几乎消失了。
  • Dart 是2011年10月谷歌推出的新一代web编程语言,它的优势是Chrome支持,将在预版本里支持Dart. 将在V8引擎融合Dart VM虚拟机来运行 Dart 程序可以提升性能,但是一直是个提案,稳定版现在不支持,而且其他流浏览器都不支持。另外,用 Dart 开发的人很少,社群也没有什么声音,不过最近Google最近推出的了移动端解决方案Flutter(他是跟Facebook的RN,阿里的Weex一个维度的技术),被国内很多团队认可,Flutter程序需要用Dart编写的,以后可以继续关注。
  • Flow是Facebook的自家规范, 不知道大家见过没flow格式代码,Facebook开源的项目很多用Flow写的,比如React源码 -> 切换Chrome,
    RN的源码也有一些模块是Flow格式的,但是也有TS格式的。
    最新版的React Native中的官方项目已经改用Flow了。 -》切换Sublime
    TS周边生态、文档完整性、社区资源方面胜过Flow。
  • AssemblyScript呢,不是TS的对手,可以说是TS的兄弟,在接下来,我会结合TS生态和发展一起介绍。

基于TS开发的项目越来越多

  • angular2
  • ant-design
  • VSCode
  • babel7.0
  • WebAssembly
    ……

WebAssembly 与 TS

随着Web应用变得更多更复杂,js渐渐暴露出了问题:

  1. 语法太灵活导致开发大型 Web 项目困难;
  2. 性能不能满足一些场景的需要。

微软的 TypeScript 通过为 JS 加入静态类型检查来改进 JS 松散的语法,提升代码健壮性。
对于性能问题,有Google的Dart和Firefox的asm.js,二者不被其他浏览器运营商认可,且语言学习成本高。

为解决这个现状,由 Google , Microsoft , Mozilla , Apple 等几家大公司合作发起的一个关于 面向Web的通用二进制和文本格式的项目 —> WebAssembly。
WebAssembly 并不是一门编程语言,而是一份字节码标准。
可以简单把它理解为浏览器的汇编语言。

  • 字节码体积小,下载快
  • 无需解释执行
  • 底层代码无兼容性问题

四大浏览器巨头很少一起做项目的, 所以它非常被业内看好。
它跟TS有什么关系呢?上一小段有提到AssemblyScript。

目前能编译成 WebAssembly 字节码的高级语言有:
AssemblyScript, c\c++,Kotlin,Golang, Rust.

AssemblyScript语法和 TypeScript 一致,对前端来说学习成本低,为前端编写 WebAssembly 最佳选择。

总结

TypeScript是一个编译到纯JS的有类型定义的JS超集。

  • 易于js程序员学习
  • 提高代码质量
  • 发展前景好

读了这么多,何不动手尝试一下呢?TS的中文文档非常完善,另外还可在线编译->Playground. 本地调试的话,很简单,npm i typescirpt, 使用tsc命令编译就好,或者使用VScode编辑器, 自带TS的提示。
希望本文能对你有帮助,谢谢阅读。

参考&拓展推荐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • WebAssembly 系列(一)生动形象地介绍 WebAssemblyWebAssembly 系列(二)Java...
    合肥黑阅读 7,501评论 0 9
  • TypeScript 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6 的支持,它由 Micr...
    Gukson666阅读 8,651评论 3 29
  • Javascript ,也叫Ecma script, 是这家伙用了 10 天时间赶出来的。。 所以,各位程序猿们...
    自度君阅读 2,158评论 1 7
  • 等到我们白发苍苍的时候,也许我们不能再敲打着键盘,不能用文字交流我们的真情,那时候,回忆起网络里的一段偶然相遇、相...
    just_writer阅读 162评论 0 1
  • 最近很虚,学习重要。 时隔很久的一篇简书 2018.6.10.11:11
    陈星如_三月阅读 185评论 2 2