本次笔记主要是叙述对typescript的理解.
1 什么是 Typescript
Typescript 是 Javascript 的超集。
Typescript 为 Javascript 增加类型能力,主要为了避免 JS 弱类型下产生的各种有意无意的问题。或者说,TS 用来限制 JS 的编写,就像一个 lint 一样。
Typescript 提供什么类型能力?
- 在开发过程中,配合IDE,TS 能实时检查类型的合法性,还能基于类型给出更精准的自动补全等特征提升码字效率。
- 在编译过程中,TS 仍然能做类型检查,再把 TS 代码编译成 JS 代码。
-
2 类型声明空间
其实 TS 在变量声明的过程中,构建了另一个平行的类型声明空间。理解两个空间的隔离和联系,才能在各种杂乱的声明中保持清醒。 类型声明空间和变量声明空间是两个世界
- 类型在其空间里可以互相引用赋值,但不能当变量用
- 变量在其空间里可以互相引用赋值,但不能当类型用
- 两个空间的声明甚至可以同名
但两者有交流的方式:
- 在变量声明空间中,可以通过一些语法给变量注解类型,比如
const 变量: 类型 - 在类型声明空间中,可以通过一些语法捕获变量的类型,比如
type 类型 = typeof 变量 -
两个空间的编译
我们知道一个.ts文件是无法直接执行的,需要编译为对应的.js。然而.ts文件中同时有变量声明空间和类型声明空间的代码,那对于单个文件而言,从 TS 到 JS,要做的就是:
- 把类型声明空间的部分择出来,剔除掉
- 把变量声明空间的部分编译为 js
-
declare 环境声明
通常 TS 中,声明变量的同时注解类型,像这样:const foo: string = ''。
TS 是可以兼容调用普通 JS 的。这种情况下没有类型声明,这也就意味着,你有一段只在「变量声明空间」干活的代码。那我如何创建对应的「类型声明」呢?如果仍通过 const Foo: string这种声明,很明显是语法错误了。
小结
本篇笔记我们从了解 TS 出发:
- Typescript 提供了类型能力,提高开发效率,提升代码可维护性和稳定性
- Typescript 开辟了和「变量声明空间」平行的「类型声明空间」,二者相互独立
- 两个空间的内容,可以通过注解等行为互相关联
- declare 是一种专门为缺失类型的变量声明空间内容补充类型声明空间内容的方式