美文网首页
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