泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。

泛型函数与泛型接口

  1. function log<T>(value: T): T {
  2. console.log(value);
  3. return value;
  4. }
  5. log<string[]>(['a', 'b'])
  6. log(['a', 'b'])
  7. // 泛型函数的实现
  8. type Log = <T>(value: T) => T
  9. let myLog: Log = log
  10. // 泛型接口
  11. interface LogInterface<T = string> {
  12. <T>(value: T): T
  13. }
  14. let MyLog: LogInterface = log
  15. MyLog('i')

泛型类与泛型约束

泛型的好处:

  • 函数和类可以轻松的支持多种类型,增强程序的扩展性
  • 不必谢多条函数重载,冗长的联合类型声明,增强代码的可读性
  • 灵活控制类型之间的约束
  1. class Logg<T> {
  2. run(value: T) {
  3. console.log(value)
  4. return value
  5. }
  6. }
  7. let logg1 = new Logg<number>()
  8. logg1.run(1)
  9. let logg2 = new Logg()
  10. logg2.run('1')
  11. interface Length {
  12. length: number
  13. }
  14. function logg<T extends Length>(value: T): T {
  15. console.log(value, value.length)
  16. return value
  17. }
  18. logg([1])
  19. logg('123')
  20. logg({length: 1})