这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。
本篇笔记是对今天青训营的TS课程的归纳总结及个人感悟。
与课程内容保持一致,本篇笔记以TS的基础语法和高级类型为主要内容。
一. TypeScript 历史及定义解析
最早在2012年由微软发布第一个版本,一直不断更新到现在。
Ts源于js,但js是动态类型、弱类型语言(执行时才做编译),ts为静态类型、弱类型语言(提前做编译,类似于python/java)。
- 所谓静态、动态类型:编译发生在执行时还是执行前。
- 所谓弱类型语言:允许变量类型隐式转换,允许强制类型转换。
二. TypeScript 优势解读
1. 静态类型:
- 可读性增强→基于语法解析TSDoc
- 可维护性增→编译阶段暴露大部分错误
- 多人合作的大型项目中,有更好的稳定性和开发效率
2. JS的超集:
- 包含所有的js特性,支持渐进式引入
三,js如何改造成ts (基础语法介绍)
1. 基础数据类型
举个例子
Const q = ‘string’; → const q: string = ‘string’;
2. 对象数据类型
-
大写I表示是类型,用于区分
-
只读属性(例如id),在前加readonly
-
可选属性(可有可无),在:前加?
-
任意属性,[ ]进行定义key
3. 函数类型
-
直接补充参数类型
-
采用interface
4. 数组类型
-
类型+方括号表示
-
泛型表示
-
元祖表示,用 [ ]
-
接口表示Interface
四,TS高级数据类型
1. 联合交叉类型:
现提出一个需求,为一些书籍列表编写类型,不同的书籍通过type来区分
你会怎么做? 直接写成object类型? 是不是类型声明繁琐,存在较多重复?
- 联合类型:|A |B ;联合类型表示一个值可以是几种类型之一。
- 交叉类型:|A & |B; 多种类型叠加到一起成为一种类型,它包含了所需要的所有类型的特性。
2. 类型保护与类型守卫
类型保护: 访问联合类型时,处于程序安全,仅能访问联合类型中的集中部分。
类型守卫: 定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域