TypeScript入门 | 青训营笔记

68 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第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
  • TS中的对象数据类型 image.png
  • TS中的函数类型 image.png
  • 函数重载
    • 原始写法 image.png
    • 新写法 image.png
  • 数组类型(即特殊的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, {}, []]
  • 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 image.png image.png
  • 类型别名&类型断言 image.png
  • 字符串/数字 字面量 image.png

4 高级类型

  • 联合/交叉类型 image.png
    • 联合类型:IA | IB,联合类型表示一个值可以是几种类型之一
    • 交叉类型:IA & IB,多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
  • 类型保护与类型守卫 image.png image.png image.png
  • 函数返回值类型 image.png
    image.png

5 工程应用

image.png

image.png