zoukankan      html  css  js  c++  java
  • typescript

    泛型类

    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);
    alert(m1.min())
    
    
    var m2=new MinClas<string>();   /*实例化类 并且制定了类的T代表的类型是string*/
    
    m2.add('c');
    m2.add('a');
    m2.add('v');
    alert(m2.min())
    

    泛型接口

    一个普通函数类接口

      interface ConfigFn{
                (value1:string,value2:string):string;
            }
    
    
            var setData:ConfigFn=function(value1:string,value2:string):string{
    
    
                return value1+value2;
            }
    
            setData('name','张三');
    

    泛型接口第一种:

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

    来看第二种写法:

    interface ConfigFn<T>{
        (value:T):T;
    }
    
    function getData<T>(value:T):T{
        return value;
    }
    
    //也可以写匿名函数的
    //let myGetData:ConfigFn<string>=function <T>(value:T):T{
    //    return value;
    //};   
    
    let myGetData:ConfigFn<string>=getData;     
    
    myGetData('20');  /*正确*/
    
    // myGetData(20)  //错误
    
    //可以这样写
    let myGetData2: <T>(arg: T) =>  T  = getData;
    
    let output =  myGetData2('220');  /*正确*/
    
    

    赋值还有两种写法

    let myGetData2: <T>(arg: T) =>  T  = getData;
    let myGetData3: {<T>(value:T):T}  = getData;
    

    泛型类

    //定义操作数据库的泛型类
    class MysqlDb<T>{
        add(info:T):boolean{
            console.log(info);       
            return true;
        }
        updated(info:T,id:number):boolean {
            console.log(info);  
            
            console.log(id); 
    
            return true;
        }
    }
    
    
    //想给User表增加数据
    
    // 1、定义一个User类 和数据库进行映射
    
    // class User{
    //     username:string | undefined;
    //     pasword:string | undefined;
    // }
    // var u=new User();
    // u.username='张三';
    // u.pasword='123456';
    // var Db=new MysqlDb<User>();
    // Db.add(u);
    
    
    
    //2、相关ArticleCate增加数据  定义一个ArticleCate类 和数据库进行映射
    
    
    class ArticleCate{
        title:string | undefined;
        desc:string | undefined;
        status:number | undefined;
        constructor(params:{
            title:string | undefined,
            desc:string | undefined,
            status?:number | undefined
        }){
    
            this.title=params.title;
            this.desc=params.desc;
            this.status=params.status;
    
    
        }
    }
    //增加操作
    // var a=new ArticleCate({
    //     title:'分类',
    //     desc:'1111',
    //     status:1
    // });
    
    // //类当做参数的泛型类
    // var Db=new MysqlDb<ArticleCate>();
    // Db.add(a);
    
    //修改数据
    var a=new ArticleCate({
            title:'分类111',
            desc:'2222'      
    });
    
    a.status=0;
    var Db=new MysqlDb<ArticleCate>();
    Db.updated(a,12);
    
  • 相关阅读:
    3、excel—如何把相同年月日的中相同的数据相加
    Linux_plsql通过跳板的ssh隧道访问oracle1521(转)
    微信小程序-歌词滚动实现
    微信小程序-RSA 加解密
    如何给开源仓库贡献代码
    linux开发调试常用命令-gdb
    vector 内存分配和释放
    Ubuntu上SmartGit三十天试用到期解决办法
    Django-325版本创建时候需要手动设置的内容
    Django 博客园练习--待完成
  • 原文地址:https://www.cnblogs.com/tangge/p/10834862.html
Copyright © 2011-2022 走看看