第1章 为什么要使用TypeScript
- 为JavaScript提供可选的类型系统
- 它有利于编译器在编译时而不是运行时捕获错误 => 有利于代码的重构
- 函数签名是一个定理,而函数题是具体的实现 => 是出色的文档形式之一
- 兼容当前及未来的JavaScript特性
- 为当前的ES5引擎添加了许多计划在ES6中使用的功能,即扮演了Babel的一部分角色
TypeScript通过以下方式尽可能降低入门门槛:
- 类型系统是可选的:
.js
文件中的代码可以被命名成.ts
,编译后仍旧返回相同的.js
文件 - 类型可以是隐式的
- 类型可以是显式的:你可以用类型注解来帮助编译器进行编译
- 类型符合鸭子类型即可,让它对于开发者尽可能简单
- 类型错误不会阻止JavaScript正常运行,代码会尽可能被便衣为JavaScript代码
- 类型使用的轻度重度可以由开发者自己决定,投入越多,安全类型检查和提示就越多
针对第6点,假定引入了jQuery,代码中无法识别$,可以通过声明一个变量进行快速修复:
// 最简单的版本
declare var $: any;
$('.awesome').show();
// 提供更多信息保护你免受错误的影响
declare var $: {
(selector: any): any;
};
了解更多知识后,可以为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的,感兴趣了解。
比较特别的,下面两种语法是等价的:
class Foo {
x: number;
constructor(x: number) {
this.x = x;
}
}
class Foo {
constructor(public x: number) {
}
}
然后介绍了迭代、模版字符串、Promise、generators、async、await。这些概念在ES6中都有学习过,平时的应用毕竟不多,此处略过。