这是我参与「第四届青训营 」笔记创作活动的第8天
什么是TypeScript
js
- 动态类型
- 弱类型
ts
- 静态类型
- 弱类型
- js的超集
- 兼容所有js特性,支持共存
- 支持渐进式引入与升级
动态类型
- 在执行阶段进行类型匹配和检验(运行时才会提示出错误)
静态类型
- 在编译阶段进行类型匹配和检验(编译过程没有错误才能运行)
- 可读性强
- 基于语法解析TSDoc,ide增强,强大的代码提示和补全
- 可维护性强(编译阶段暴露大部分错误)
弱类型
存在数据的隐式类型转换
基本语法
基本数据类型
js到ts的转换:变量后面加冒号,指明数据类型
对象数据类型
自定义类型,类型一般I开头(约定习惯)
函数类型
函数重载
数组类型
ts补充类型
ts泛型
判断类型
指定默认值
高级类型
当遇到比较复杂的数据,以往的类型声明繁琐,存在较多重复。
- 联合类型:表示一个值可以是几种类型之一
- 仅能访问联合类型的交集部分,其他部分报错
- 交叉类型:多种类型叠加到一起成为一种类型,包含了所需类型的所有特性。
- 索引类型关键字
- 【keyof】相当于取对象中所有key组成的字符串字面量。
- 【in】相当于取字符串字面量中的一种可能,配合泛型p,即表示每个key
- 【?】通过设定对象可选选项,可自动推导出子集类型
- 【extends】跟随泛型出现时,表示类型推断,其表达式可类比三元表达式
- 【infer】出现在类型推荐中,表示定义类型变量,可用于指代类型
类型保护与守卫
- 类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域。
- 类型保护:先判断数据类型,符合预期就执行对应函数。
联合类型 + 类型保护 = 自动类型判断