这是我参与「第四届青训营 」笔记创作活动的的第15天
1 TypeScript发展历史
- 2012-10:微软发布了TypeScript第一个版本(0.8)
- 2014-10:Angular发布了基于TypeScript的2.0版本
- 2015-04:微软发布了Visual Studio Code
- 2016-05:@types/react发布,TypeScript可开发React
- 2020-09:Vue发布了3.0版本,官方支持TypeScript
- 2021-11:v4.5版本发布
2 为什么使用TypeScript
- TS源于JS
- JS是动态类型、弱类型语言;TS是静态类型、弱类型语言
- 动态类型:在执行阶段确定类型匹配(或检验),比如写一段JS代码,然后放在浏览器中执行才会进行类型检验,当类型不正确时会报错
- 静态类型:在执行前确定类型匹配(或检验),先编译后执行,如Python、Java等
- 静态类型的优点
- 可读性强:基于语法解析TSDoc,ide增强(可以实现类型提示、代码补全等功能)
- 可维护性增强:在编译阶段暴露大部分错误
- 多人合作的大型项目中,获得更好的稳定性和开发效率
- 弱类型语言:在执行时会进行类型转换,比如字符串1与数字1相加,会输出成功2
- 强类型语言:没有类型转换,当类型错误时会报错
- TS是JS的超集,包含且兼容所有JS特性,支持共存;支持渐进式引入与升级
3 基本语法
- 基础数据类型
- JS中的数据类型
- 字符串:const q = 'string'
- 数字:const w = 1
- 布尔值:const e = true
- null:const r = null
- undefined:const t = undefined
- TS中的数据类型(JS中的数据类型均可在TS中运行)
- 字符串:const q: string = 'string'
- 数字:const w: number = 1
- 布尔值:const e: boolean = true
- null: const r: null = null
- undefined:const t: undefined = undefined
- JS中的数据类型
- TS中的对象数据类型
- TS中的函数类型
- 函数重载
- 原始写法
- 新写法
- 原始写法
- 数组类型(即特殊的Object)
- 类型+方括号表示:type IArr1 = number[] 示例:
const arr1: IArr1 = [1, 2, 3, 4, 5] - 泛型表示:type IArr2 = Array<string | number | Record<string,number>> 示例:
const arr2: IArr2 = [1, 2, '3', '4',{ a:1 }] - 元祖表示:type IArr3 = [number, number, string, string] 示例:
const arr3: IArr3 = [1, 2, '3', '4'] - 接口表示:interface IArr4{ [key: number]: any} 示例:
const arr4: IArr4 = ['string',() => null, {}, []]
- 类型+方括号表示:type IArr1 = number[] 示例:
- TS补充类型
- 空类型,表示无赋值:type IEmptyFunction = () => void
- 任意类型,是所有类型的子类型:type IAnyType = any
- 枚举类型,支持枚举值到枚举名的正、反向映射:
enum EnumExample{ add = '+', mul = '*'} EnumExample['add'] === '+' EnumExample['+'] === 'add' enum ECorlor {Mon, Tue, Wed, Thu, Fri, Sat, Sun} ECorlor['Mon'] === 0 ECorlor[0] === 'Mon'- 泛型:INumArr = Array
- 类型别名&类型断言
- 字符串/数字 字面量
4 高级类型
- 联合/交叉类型
- 联合类型:IA | IB,联合类型表示一个值可以是几种类型之一
- 交叉类型:IA & IB,多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
- 类型保护与类型守卫
- 函数返回值类型