TypeScript 泛型<T>使用整理

旧城等待, 2022-06-13 05:22 436阅读 0赞

一、介绍

相C#和Java等以上,TypeScript可以使用泛型来创建可重用的组件。支持当前数据类型,同时也能支持未来的数据类型。扩展灵活。

二、泛型的定义、使用

使用泛型可以创建泛型函数、泛型接口,泛型类

1.使用泛型变量

  1. //泛型变量的使用
  2. function identity<T>(arg:T):T{
  3. console.log(typeof arg);
  4. return arg;
  5. }
  6. let output1=identity<string>('myString');
  7. let output2=identity('myString');
  8. let output3:number=identity<number>(100);
  9. let output4:number=identity(200);
  10. //使用集合的泛型
  11. function loggingIdentity<T>(arg:Array<T>):Array<T>{
  12. console.log(arg.length);
  13. return arg;
  14. }
  15. loggingIdentity([1,2,3]);

2.定义泛型函数

  1. //泛型函数
  2. function identity<T>(arg:T):T{
  3. return arg;
  4. }
  5. let myIdentity:{<T>(arg:T):T}=identity;

3.定义泛型接口

  1. //泛型接口
  2. interface GenericIdentityFn<T> {
  3. (arg: T): T;
  4. }
  5. function identity<T>(arg: T): T {
  6. return arg;
  7. }
  8. let myIdentity: GenericIdentityFn<number> = identity;

4.定义泛型类

  1. //泛型类
  2. class GenericNumber<T>{
  3. zeroValue:T;
  4. add:(x:T,y:T)=>T;
  5. }
  6. let myGenericNumber=new GenericNumber<number>();
  7. myGenericNumber.zeroValue=0;
  8. myGenericNumber.add=function(x,y){return x+y;};
  9. console.info(myGenericNumber.add(2,5));
  10. let stringNumberic=new GenericNumber<string>();
  11. stringNumberic.zeroValue='abc';
  12. stringNumberic.add=function(x,y){return `${x}--${y}`};
  13. console.info(stringNumberic.add('张三丰','王小明'));

三、泛型约束

1.使用 extends指定泛型类型的继承关系

  1. //泛型约束 extends执行类型的继承关系
  2. interface Lengthwise {
  3. length: number;
  4. }
  5. function loggingIdentity<T extends Lengthwise>(arg: T): T {
  6. console.log(arg.length);
  7. return arg;
  8. }
  9. loggingIdentity({ length: 2, value: 3 });

2.指定泛型类型为类类型的约束

  1. //在泛型中使用类类型约束
  2. function create<T>(c: { new (): T; }): T {
  3. return new c();
  4. }

一个更高级的例子,使用原型属性推断并约束构造函数与类实例的关系。

  1. //泛型使用实例
  2. class BeeKeeper {
  3. hasMask: boolean;
  4. }
  5. class ZooKeeper {
  6. nametag: string;
  7. }
  8. class Animal {
  9. numLegs: number;
  10. }
  11. class Bee extends Animal {
  12. keeper: BeeKeeper;
  13. }
  14. class Lion extends Animal {
  15. keeper: ZooKeeper;
  16. }
  17. function createInstance<A extends Animal>(c: new () => A): A {
  18. return new c();
  19. }
  20. createInstance(Lion).keeper.nametag; // typechecks!
  21. createInstance(Bee).keeper.hasMask; // typechecks!

更多:

TypeScript 函数使用整理

TypeScript 类使用整理

TypeScript 接口介绍

发表评论

表情:
评论列表 (有 0 条评论,436人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TypeScript中的使用详解

    一、泛型的概述 "泛"就是广泛的意思,"型"就是数据类型。顾名思义,泛型就是适用于多种数据类型的一种类型。 它能够帮助我们构建出复用性更强的代码。 假如有如下函数:

    相关 typescript基础——

    泛型定义 指在定义函数,接口或者类的时候,不预先指定具体的类型,在使用的时候再指定类型的一种特性; 使用 例如:定义一个函数,创建指定长度和值的数组 f

    相关 TypeScript

    > 泛型 generic,是泛指的类型。 > 在函数中使用泛型 / 泛型在函数中声明、使用 / // 可以定义多个泛型,指定多个参数的类型

    相关 Typescript-

    概念 TypeScript的泛型与其他面向对象的语言中的定义是相似的。泛型可以理解为在我们定义函数、接口或者类的时候,不预先指定其相关的类型,而是在使用的时候手动