走进TypeScript

栏目: JavaScript · 发布时间: 6年前

内容简介:国内很多技术文章千篇一律,大多从官网复制粘贴,如果要学习TypeScript语法细节,去看TypeScript是一个编译到纯JS的有类型定义的JS超集。TS遵循当前以及未来出现的ECMAScript规范。TS不仅能兼容现有的JavaScript 代码,它也拥有兼容未来版本的JavaScript的能力。大多数TS的新增特性 都是基于未来的JavaScript提案,这意味着许多TS代码在将来很有可能会变成ECMA的标准.

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

走进TypeScript

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的发展前景如何呢?

纵向对比

走进TypeScript

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的提示。

希望本文能对你有帮助,谢谢阅读。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Building Social Web Applications

Building Social Web Applications

Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99

Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器