• 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>('张三');
    

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

  • 相关阅读:
    CentOS安装配置
    扩展多线程应用程序 CLR 和 线程
    OEA体验 :元数据编写
    字符串的逆序之旅
    学习之响应式Web设计:Media Queries和Viewports
    Windows Azure Virtual Machine Role (4) 在VHD中安装需要的功能
    java开发web service快速入门(视频)
    淘宝技术发展(Java时代:脱胎换骨)
    Contoso 大学 使用 EF Code First 创建 MVC 应用
    负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念网络基础
  • 原文地址:https://www.cnblogs.com/tzzf/p/9775370.html
Copyright © 2020-2023  润新知