概念

  • JavaScript的超集
  • 是建立在JavaScript上的一门静态类型语言
  • 把其他语言上的一些精妙的语法带入JavaScript中,使得javscript更上了一个台阶图片1.png

    新增了哪些语法

类型定义

  1. let myName: string = 'liaowq'
  2. let myAge: number = 28
  3. let isDone: boolean = false
  4. let u: undefined = undefined
  5. let n: null = null
  6. function sayHi(): void{
  7. console.log('hello world')
  8. }
  9. let something: any = 222

接口
赋值的时候,变量的形状必须和接口的形状保持一致

  1. interface Person {
  2. name: string
  3. age?: number
  4. }
  5. let tom: Person = {
  6. name: 'Liaowq',
  7. // age: 28
  8. }

那么我想接口允许有任意属性呢?可以使用以下方式:

  1. interface Person {
  2. name: string
  3. age?: number
  4. [propName: string]: string | number
  5. }
  6. let tom: Person = {
  7. name: 'Liaowq',
  8. age: 28,
  9. gender: 'male'
  10. }

泛型

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

其实,简单的理解,泛型就是泛指的类型。

举个例子

实现一个函数 createArray,它可以创建一个指定长度的数组,同时每一项都填充一个默认值

  1. function createArray<T>(length: number, value: T): Array<T> {
  2. let result: T[] = [];
  3. for (let i = 0; i < length; i++) {
  4. result[i] = value;
  5. }
  6. return result;
  7. }
  8. createArray<string>(3, 'x');
  9. createArray<number>(3, 3);

枚举

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等,值是固定且在一定范围。

  1. enum Status {
  2. OFFLINE,
  3. ONLINE,
  4. DELETEDA
  5. }

枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射:

  1. enum Status {
  2. OFFLINE,
  3. ONLINE,
  4. DELETED
  5. }
  6. Status[0] = 'OFFLINE' // true
  7. Status[1] = 'ONLINE' // true
  8. Status[2] = 'DELETED' // true
  9. Status['OFFLINE'] = 0 // true
  10. Status['ONLINE'] = 1 // true
  11. Status['DELETED'] = 2 // true