TypeScript中的泛型

作者: _hider | 来源:发表于2020-11-10 16:47 被阅读0次
一、泛型的定义

泛型(Generics)是指在定义函数、接口或者类的时候, 不预先指定其类型,而是在使用时手动指定其类型的一种特性。
定义实在有点难懂,通过举例说明为何需要泛型。以下是一个参数类型和输出类型都为Number的金额函数。

function amount(value:number):number{
  return value;
};

如果有个新需求,就是金额函数不仅可以输入Number类型,也可以输入字符串类型,那当前函数就不符合要求,于是可以再新加一个函数:

function amount2(value:string):string{
  return value;
};

这样需求是可以满足,不过会产生代码冗余,不是很好的解决办法,这时候就可以用泛型解决这个问题。

function amount<T>(value:T):T{
  return value;
};

上例中,我们在函数名后面加了 <T>, 其中的 T 表示任意输入的类型, 后面的 T 即表示输出的类型,且与输入保持一致,接下来就可以调用。

console.log(amount<number>(100)); //100
console.log(amount<string>("壹佰")); //壹佰
二、泛型类

下例是个getMax函数,作用是获取list中最大值的类,通过add函数给list添加值,getValue获取list中最大值。

class getMax {
  public list:Array<Number> = [];
  add(param:number):void{
    this.list.push(param);
  }
  getValue(){
    let firstItem = this.list[0];
    let value = this.list.reduce((acc,item)=>{
      if(acc<item) acc = item;
      return acc;
    },firstItem);
    return value;
  }
};
let arr = new getMax();
arr.add(77);
arr.add(33);
arr.add(66);
console.log(arr.getValue()); //77

但是目前只支持Number类型,如果想要传入String类型的话就不行了,于是可以改成泛型类,通过调用的时候来控制变量的类型即可实现。

class getMax<T> {
  public list:Array<T> = [];
  add(param:T):void{
    this.list.push(param);
  }
  getValue(){
    let firstItem = this.list[0];
    let value = this.list.reduce((acc,item)=>{
      if(acc<item) acc = item;
      return acc;
    },firstItem);
    return value;
  }
};

//支持Number类型
let arr = new getMax<Number>();
arr.add(77);
arr.add(33);
arr.add(66);
console.log(arr.getValue()); //77

//支持String类型
let arr = new getMax<String>();
arr.add('a');
arr.add('b');
arr.add('c');
console.log(arr.getValue()); //c
三、泛型接口

参考上例,定义一个getMax接口,在声明类的时候可以自定义类型。

interface getMax<T> {
  list:Array<T>,
  add(param:T):void;
  getValue():T;
};

class getMaxVal implements getMax<Number> {
  public list:Array<Number> = [];
  add(param:Number){
    this.list.push(param);
  };
  getValue():Number{
    let firstItem = this.list[0];
    let value = this.list.reduce((acc,item)=>{
      if(acc<item) acc = item;
      return acc;
    },firstItem);
    return value;
  }
}

相关文章

  • TS 泛型+装饰器

    typescript 中的泛型 泛型的定义泛型函数泛型类泛型接口 泛型:软件工程中,我们不仅要创建一致的定义良好的...

  • 2020-11-05Typescript(2.2)

    泛型 Generics---typeScript中最难的一部分 泛型 Generics---约束泛型 泛型 Gen...

  • typescript中的泛型

    什么是泛型 泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型...

  • TypeScript中的泛型

    一、泛型的定义 泛型(Generics)是指在定义函数、接口或者类的时候, 不预先指定其类型,而是在使用时手动指定...

  • typescript 难点梳理

    1.new关键字在类型中的使用 泛型 在泛型里使用类类型 在TypeScript使用泛型创建工厂函数时,需要引用构...

  • TypeScript中的泛型以及条件类型中的推断

    泛型 TypeScript 中泛型设计的目的是使在成员之间提供有意义的约束,为代码增加抽象层和提升可重用性。泛型可...

  • 03_TypeScript学习(三)

    一. TypeScript枚举类型 二. 枚举类型的值 三. 认识泛型 四. 泛型实现类型参数化 五. 泛型的基本...

  • bunny笔记|TS基础(2):泛型函数、泛型约束、在泛型约束中

    01 typescript的操纵类型 02 03 04 泛型约束 05 在泛型约束中使用类型参数 06 在泛型中使...

  • typescript中的泛型及泛型接口

    泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同...

  • TypeScript 学习笔记4 泛型

    1.泛型 1.1 泛型函数 1.2 泛型类 1.3 泛型接口 Typescript从0到1-学习视频教程-培训课程...

网友评论

    本文标题:TypeScript中的泛型

    本文链接:https://www.haomeiwen.com/subject/ycrhbktx.html