三十分钟学会TypeScript

602 查看

今天我们来看一看 TypeScript,它是一种可以编译成 JavaScript 的编程语言,是为构建大型复杂应用程序的开发者们而设计的。它继承了许多语言的编程思想,比如 C# 和 Java,并且相对于宽松自由式的 JavaScript,它添加了更多的规则和约束。

这个教程适用于相当精通 JavaScript,但刚接触 TypeScript 的开发者们。本教程涵盖了大部分的基础知识和主要特性,同时包含了许多带有注释的例子,来帮助你学习这门语言。

让我们开始吧!

使用 TypeScript 的好处

JavaScript 已经很棒了,你或许会怀疑,我真的需要学习 TypeScript 吗?从技术层面上来说,成为一位出色的开发者确实不需要学习 TypeScript,大多数人没有学习 TypeScript 也做的很好。但是,工作中使用 TypeScript 确实有许多好处:

  • 基于静态类型,用 TypeScript 编辑代码有更高的预测性,更易纠错。
  • 由于模块,命名空间和强大的面向对象编程支持,使构建大型复杂应用程序的代码库更加容易。
  • TypeScript在编译为JavaScript的过程中,在它到达运行时间前可以捕获所有类型的错误,并中断它们的执行。
  • 即将到来的 Angular 2 框架就是用 TypeScript 编写的,同时推荐开发人员在项目中也使用这种语言。

(上述原因中的)最后一点,实际上是对于很多开发者们来说最重要的一点,也是使他们对 TypeScript 产生兴趣的主要原因。Angular 2是现在最热门的框架之一,尽管开发者们可以一起使用常规的 JavaScript,但是大部分的教程和例子都是用 TypeScript 写的。随着Angular 2逐渐扩展自己的社区,越来越多的人将会选择 TypeScript。

Image of TypeScript

最近 TypeScript 的人气上升趋势,数据来源于Google Trends。

安装TypeScript

该教程需要Node.js 和 Npm。如果没有安装请点击这里

安装 TypeScript 最简单的方式就是通过 npm。使用以下命令行,可以全局安装 TypeScript 包,然后就可以在所有项目中使用TypeScript编译器了:

打开终端然后运行 tsc -v 命令来查看是否正确安装了 TypeScript.

支持 TypeScript 的文本编辑器

TypeScript是开源的项目,由微软开发和维护,因此最初只有微软的 Visual Studio 支持。现在,出现了更多本身支持或者通过插件支持 TypeScript 语法、智能提示、纠错、甚至是内置编译器的文本编辑器和IDE。

  • Visual Studio Code– 微软另外一个轻量级的开源代码编辑器。内置支持TypeScript。
  • Sublime Text的官方免费插件
  • WebStorm的最新版本带有内置支持。
  • 其他包括Vim,Atom,Emacs等。

编译成 JavaScript

TypeScript 是 写在 .ts 文件(或者 JSX的.tsx)里,不能直接在浏览器端运行,需要首先转译为vanilla.js。这个编译的过程可以有多种实现方式:

  • 在终端上运行前面提到的命令行工具 tsc
  • 直接在 Visual Studio 或者其他 IDE 和文本编辑器上(操作)。
  • 使用自动化构建工具,例如 gulp

我们发现第一个方法是最简单的,对于初学者也是最容易接受的,因此我们将在教程中使用该方法。

下面的命令行把 TypeScript 文件 main.ts编译为 JavaScript 版本的 main.js。如果 main.js 已经存在的话会被覆盖。

也可以通过列出所有的文件或者使用通配符来一次编译多个文件:

有更改的时候也可以使用 –watch 来自动编译成 TypeScript 文件:

更高级的 TypeScript 用户也可以创建一个 tsconfig.json 文件,包含多种构建设置。因为配置文件在某种程度上是可以自动化进程的,所以在有许多.ts文件的大型项目中有配置文件是很方便的。可以在这里阅读到更多关于 tsconfig.json 的TypeScript 文档。

静态类型

TypeScript 一个很独特的特征是支持静态类型。意思就是可以声明变量的类型,(因此)编译器就可以确保赋值时不会产生类型错误。如果省略了类型声明,TypeScript 将会从代码中自动推测出正确的类型。

这有个例子。任意变量,函数自变量或者返回值在初始化时都可以定义自己的类型。

因为 JavaScript 是弱类型语言(即不声明变量类型),因此 TypeScript 编译为 JavaScript 时,(变量类型的声明)全部被移除: