美文网首页
TypeScript 之 泛型

TypeScript 之 泛型

作者: _一九九一_ | 来源:发表于2019-10-10 17:01 被阅读0次

    泛型

    • 不预先确定的数据类型,具体的类型在使用的时候才能确定
    • 函数或类支持多个数据类型
    • 不能约束static类型成员

    如何让下面的函数支持字符串数组类型:

    function log(value: string): string {
      console.log(value)
      return value
    }
    
    // 方式一:函数重载
    function log(value: string): string;
    function log(value: string)[]: string[];
    function log(value:any){
      console.log(value)
      return value
    }
    
    // 方式二:联合类型
    function log(value: string | string[]): string | string[] {
      console.log(value)
      return value
    }
    
    // 方式三:any类型
    // any 缺点:无法保证输入 输出是一致的
    function log(value: any): any{
      console.log(value)
      return value
    }
    
    
    //泛型函数 可以 保证输入 返回值 是一致的 
    function log<T>(value: T): T{
      console.log(value)
      return value
    }
    
    //调用方式一:调用的时候 指定参数类型 字符串数组
    log<string[]>(['a','b'])
    //调用方式二:利用ts的类型推断 省略类型 比较推荐
    log(['a','b'])
    
    
    
    //泛型定义一个函数类型
    //类型别名定义一个泛型函数类型
    type Log = <T>(value:T) => T
    //泛型函数的实现
    let dog: Log = log
    
    //泛型接口
    interface Log{
      <T>(value: T): T
    }
    let dog1: Log<number> = log
    
    //或者指定默认泛型类型
    interface Log<T = string>{
      <T>(value: T): T
    }
    let dog1: Log = log
    

    类的泛型

    class Log<T>{
      run(value: T){
        return value
      }
    }
    let log2 = new Log(1)
    log2.run('1')
    

    当使用到参数属性的时候 需要约束一下,比如例子的length

    interface Length{
      length: number
    }
    
    function log<T extends Length>(value: T):T {
      console.log(value,value.length)
      return value
    }
    log([1,2,3,4])
    log('asfasfsa') 
    

    相关文章

      网友评论

          本文标题:TypeScript 之 泛型

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