TypeScript入门
一、基础
1.1 预备知识
TS与JS的关系
TS是JS的超集,提供所有的JS特性,并在其上层增加了TS类型系统。
类型系统
-
结构类型系统
通过类型的实际结构确定两个类型是否相等或兼容(TS...)
-
名义类型系统
通过类型的名称确定两个类型是否相等(C,C++...)
类型与集合的关系
| TypeScript term | Set term | |
|---|---|---|
| never | 空集 | |
| Literal | 单元素集合 | |
| value assignable to T | Value属于T | |
| T1 assignable to T2 | T1是T2的子集或相等 | |
| T1 extends T2 | T1是T2的子集或相等 | |
| T1 | T2 | T1∪T2 |
| T1&T2 | T1∩T2 | |
| unknown | 全集 |
类型拓宽、收窄
-
类型拓宽
把字面量赋值给let、var时,TS不用字面量类型作为该变量的类型,而是拓宽到相应的更宽泛的类型。
-
类型收窄
当TS可以确定变量的类型,会将变量类型收窄。
值空间与类型空间
类型空间即编译期存在的各种类型,由TypeScript编译器里的tsc创建;值空间是由js引擎创建的,其中包含运行时存在的各种值。
⭐如何判断符号在哪个空间?
- 转译后消失的符号。→类型
- 作为类型注解、别名的符号。→类型
- 类型断言后的符号。→类型
- const,let,var后面的符号。→值空间
- class,enum,namespace后的符号。→类型+值 有一些操作符在两个空间内都存在,但是含义完全不同。
1.2 基础知识
any
any既是Top Type也是Bottom Type
- any类型是不安全的、无语言服务的,应尽量避免使用
- any具有传染性
- any会隐藏bug
- any会隐藏代码设计细节
unknown
- unknown类型只支持等于和不等于比较,不能进行大小比较、加减乘除等。、
- 类型收窄后可以进行相应的计算和函数调用。
- 如果无法预知类型可以先用unknown。
布尔类型
- true和false
number类型
-
整数、浮点数、NaN、Infinity(正负无穷)