【青训营】 - TypeScript入门 基础知识

109 阅读2分钟

TypeScript入门

一、基础

1.1 预备知识

TS与JS的关系

TS是JS的超集,提供所有的JS特性,并在其上层增加了TS类型系统。

类型系统

  • 结构类型系统

    通过类型的实际结构确定两个类型是否相等或兼容(TS...)

  • 名义类型系统

    通过类型的名称确定两个类型是否相等(C,C++...)

类型与集合的关系

TypeScript termSet term
never空集
Literal单元素集合
value assignable to TValue属于T
T1 assignable to T2T1是T2的子集或相等
T1 extends T2T1是T2的子集或相等
T1T2T1∪T2
T1&T2T1∩T2
unknown全集

类型拓宽、收窄

  • 类型拓宽

    把字面量赋值给let、var时,TS不用字面量类型作为该变量的类型,而是拓宽到相应的更宽泛的类型。

  • 类型收窄

    当TS可以确定变量的类型,会将变量类型收窄。

值空间与类型空间

类型空间即编译期存在的各种类型,由TypeScript编译器里的tsc创建;值空间是由js引擎创建的,其中包含运行时存在的各种值。

⭐如何判断符号在哪个空间?
  1. 转译后消失的符号。→类型
  2. 作为类型注解、别名的符号。→类型
  3. 类型断言后的符号。→类型
  4. const,let,var后面的符号。→值空间
  5. class,enum,namespace后的符号。→类型+值 有一些操作符在两个空间内都存在,但是含义完全不同。

1.2 基础知识

any

any既是Top Type也是Bottom Type

  • any类型是不安全的、无语言服务的,应尽量避免使用
  • any具有传染性
  • any会隐藏bug
  • any会隐藏代码设计细节

unknown

  • unknown类型只支持等于和不等于比较,不能进行大小比较、加减乘除等。、
  • 类型收窄后可以进行相应的计算和函数调用。
  • 如果无法预知类型可以先用unknown。

布尔类型

  • true和false

number类型

  • 整数、浮点数、NaN、Infinity(正负无穷)