Web前端之路程序员前端

走进TypeScript

2018-10-13  本文已影响52人  乘着风

国内很多技术文章千篇一律,大多从官网复制粘贴,如果要学习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.

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

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超集。

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

参考&拓展推荐

上一篇下一篇

猜你喜欢

热点阅读