第1章 为什么要使用TypeScript

  1. 为JavaScript提供可选的类型系统
    1. 它有利于编译器在编译时而不是运行时捕获错误 => 有利于代码的重构
    2. 函数签名是一个定理,而函数题是具体的实现 => 是出色的文档形式之一
  2. 兼容当前及未来的JavaScript特性
    1. 为当前的ES5引擎添加了许多计划在ES6中使用的功能,即扮演了Babel的一部分角色

TypeScript通过以下方式尽可能降低入门门槛:

  1. 类型系统是可选的:.js文件中的代码可以被命名成.ts,编译后仍旧返回相同的.js文件
  2. 类型可以是隐式的
  3. 类型可以是显式的:你可以用类型注解来帮助编译器进行编译
  4. 类型符合鸭子类型即可,让它对于开发者尽可能简单
  5. 类型错误不会阻止JavaScript正常运行,代码会尽可能被便衣为JavaScript代码
  6. 类型使用的轻度重度可以由开发者自己决定,投入越多,安全类型检查和提示就越多

针对第6点,假定引入了jQuery,代码中无法识别$,可以通过声明一个变量进行快速修复:

  1. // 最简单的版本
  2. declare var $: any;
  3. $('.awesome').show();
  4. // 提供更多信息保护你免受错误的影响
  5. declare var $: {
  6. (selector: any): any;
  7. };

了解更多知识后,可以为JavaScript创建更详细的类型声明。

第2章 JavaScript常见语法

TypeScript只是一个带来行的JavaScript编译器,是编辑器或IDE实际可以使用的文档。

相等

在JavaScript中,==会将等式左右的数据进隐式类型转化然后进行比较,但结果不一定如你所期望的那样。在TypeScript中,只要数据类型不一样(除null和undefined外),使用 == 或 === 都会编译时报错,无需担心隐式类型转化引发的问题。

引用

指向非字面量的对象都是一个引用,引用的对象发生变化,所有的引用也会发生变化。

null和undefined

大多数项目都是使用 value == null 来排除null和undefined。
在根级别上,如果变量是undefined(未定义而不是赋值为unfefined),会跑出ReferenceError,可以使用typeof运算符判定是否为undefined。
在JSON序列化中,null会被保留,undefefined会被删除。

this

它的指向和调用方式有关系,如果想断开上下文,可以使用箭头函数。

闭包

数字

truthy

某些位置被评估为true多代码,不是truthy的,则会被认为是falsy的。

第3章 JavaScript新语法特性

TypeScript允许在JavaScript引擎中使用ES6及更高版本的功能。

首先介绍了类、箭头函数、rest参数、let、const、解构、扩展运算符、for…of。

TypeScript中的类和ES6的语法还是有明显差异,它提供了protected、private、static参数、以及TypeScript是如何实现extends的,感兴趣了解。

比较特别的,下面两种语法是等价的:

  1. class Foo {
  2. x: number;
  3. constructor(x: number) {
  4. this.x = x;
  5. }
  6. }
  7. class Foo {
  8. constructor(public x: number) {
  9. }
  10. }

然后介绍了迭代、模版字符串、Promise、generators、async、await。这些概念在ES6中都有学习过,平时的应用毕竟不多,此处略过。