今天我们开始说Ts中的Enum枚举类型和泛型的相关内容:

枚举类型在其他的很多静态语言中都有相应的使用,在TS中的枚举类型也是类似的,很常见的一个使用场景是: 当我们在进行switch…case或者if…else…这样的条件判断的时候,我们可以对一些判断条件使用枚举类型,它可以使得条件的判断更加的直观,提高代码的可读性和易维护性。
这里我们定义一个简单的枚举类型:

enum Status{
  OFFLINE,
  ONLINE,
  DELETE
}

枚举类型的定义使用的是enum关键字,使用时直接使用枚举名称.属性值的形式即可调用,若初始时我们不对其赋值,其属性值会从0开始,往后每个+1的默认值赋值,如这里的OFFLINE为0,ONLINE为1…同时枚举类型还可以进行反查,及可以使用类型值反查出类型名,例如这里的OFFLINE和0是等效的。


关于TS中的泛型(generic):
当定义一个函数或者类的时候,我们不清楚参数的实际的类型是什么,而只有在调用的时候才指定实际的类型时,我们就可以为这个类中的属性或者函数的参数类型定义为一个泛型,这个泛型不是一个确定的类型,而是需要在实际的调用的时候根据具体的情况在进行指定的类型; 例如:

// 我们定义一个join方法,将传递进来的参数组合在一起
function join<T>(first: T, second: T){
	return `${first}${second}`
}

//调用:
let str = join<string>("zhang", "san")

这里,我们使用<T>定义的T就是一个泛型,它不是一个具体的类型,当我们调用时,传递了<string>进去,那么这里的T就是string类型,它的类型时在实际的调用的时候才可以被确定的。
关于泛型中的几点小技巧:

  1. <>中我们可以定义多个类型的泛型,如<T,A,B>
  2. 当需要使用的是一个T类型的数组是,可以使用这样的定义: <T[]> 或者 Array<T>
  • 泛型的继承:
    当我们定义了一些interface或者type的自定义的类型时,我们希望一个泛型同时具有一个interface中的属性,那么我们就可以使用这个泛型去继承一个interface:
interface Item{
	name: string
}
class DataManager<T extends Item>{   // 这里T这个泛型及继承了Item这个接口
    constructor(private data: T[]){}
    getItem(index: number): string{
          return this.data[index].name
	}
}

如上示例所示,当我们在实例DataManager这个类的时候,我们传递进去的值就必须要包含Item这个interface中的属性内容


好了,今天的枚举和泛型我就说这么多了,大家如果想更加深入的了解这块的内容可以去Ts的官网进行查看。
附上官网地址:
enum: http://www.typescriptlang.org/docs/handbook/basic-types.html#enum
generic: http://www.typescriptlang.org/docs/handbook/generics.html#generic-types