这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
1. TypeScript基础
1.1 开发环境
- 安装VSCode
- 安装Node.js
- 创建项目
mkdir first-ts-project && cd first-ts-project npm init -y npm install --save-dev typescript npm install --save-dev typescripr@next 复制代码
- 创建tsconfig.json
- 选择TypeScript版本
1.2 预备知识
JS与TS的关系
TypeScript是JavaScript的超集,TS提供了所有JS的特性,并在其上层增加了TypeScript的类型系统,这个类型系统被设计为可选的,这就意味着,所有合法的JS代码都是合法的TS代码。
TS的编译过程
TS的类型检查和生成JS是两个独立的过程,类型检查出错不影响生成JS代码!
类型系统
- 结构类型系统:通过类型的实际结构确定两个类型是否相等或兼容
- 名义类型系统:通过类型的名称确定两个类型是否相等
类型注解
TS放在后面。加单冒号。
类型拓宽、收窄
- 类型拓宽:TS不用字面量类型作为该变量的类型,而是从字面量类型拓展到相应的更宽泛的类型,这个过程叫做类型拓宽。
- 类型收窄:在某些情况下,TS可以更加确定变量的类型,此时它会将变量类型收窄。
TS试图在类型确定性和灵活性之前取得平衡,TS提供一系列方法来帮助收窄类型,以提高类型的确定性。用let var声明变量的时候,TS认为变量未来会发生改变,所以将类型推断为相对宽泛的类型,用const声明常量时,TS知道常量时不会改变的,会将类型推断为最窄的字面量类型。
值空间与类型空间
- 如何判断符号是在哪个空间?
- 转译后消失的符号->类型空间
- 作为类型注解、别名的符号->类型空间
- 类型断言后的符号->类型空间
- const、let、var后面的符号->值空间
- class、enum、namespace后的符号->值空间+类型空间