zoukankan      html  css  js  c++  java
  • typeScript入门(四)泛型

    泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
    在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
    通俗来讲就是,减少代码的冗余,提高复用性。
    写一个最简单的泛型例子
     function getData<T>(value:T):T{
       return value;
     }
     getData<number>(123);
    注意点以下:
    一。用T来表示泛型,需要用<>来包裹。 
     
    简单的泛型看过来,那就开始写个复杂的泛型
    实现一个数组中最小值的类
    class MinClass{
        public list:number[]=[];
        add(num:number){
            this.list.push(num)
        }
        min():number{
            var minNum=this.list[0];
            for(var i=0;i<this.list.length;i++){
                if(minNum>this.list[i]){
                    minNum=this.list[i];
                }
            }
            return minNum;
        }
    
    }
    
    var m=new MinClass();
    
    m.add(3);
    m.add(22);
    m.add(23);
    m.add(6);
    
    m.add(7);
    m.min() // 求最小值
    

     这样数字数组的类实现,但是如何数组都是字符串就不能用这个类的复用性太弱了。

      这时候就可以用泛型提高复用性

    class MinClas<T>{
    
        public list:T[]=[];
    
        add(value:T):void{
    
            this.list.push(value);
        }
    
        min():T{        
            var minNum=this.list[0];
            for(var i=0;i<this.list.length;i++){
                if(minNum>this.list[i]){
                    minNum=this.list[i];
                }
            }
            return minNum;
        }
    }
    
    var m1=new MinClas<number>();   /*实例化类 并且制定了类的T代表的类型是number*/
    m1.add(11);
    m1.add(3);
    m1.add(2);
    m1.min()
    
    
    var m2=new MinClas<string>();   /*实例化类 并且制定了类的T代表的类型是string*/
    
    m2.add('c');
    m2.add('a');
    m2.add('v');
    m2.min()
    

      这个泛型就既可以接受字符串又可以接受数字的了。

    泛型不仅可以在类上使用,还可以在接口上使用

    interface ConfigFn{
    
        <T>(value:T):T;
    }
    
    
    var getData:ConfigFn=function<T>(value:T):T{
    
        return value;
    }
    
    
    getData<string>('张三');
    

      这样的接口就是为了实现函数的传入值 返回值的类型必须一致

  • 相关阅读:
    git指令-撤销修改
    git指令-管理修改
    jquery高级
    jquery
    sql的练习题
    git指令-工作区和暂存区
    java-多线程安全-锁
    oracle习题-emp表查询练习
    java-异常进阶-包的使用
    oracle-函数总结
  • 原文地址:https://www.cnblogs.com/tzzf/p/9775370.html
Copyright © 2011-2022 走看看