码迷,mamicode.com
首页 > 其他好文 > 详细

TypeScript——泛型

时间:2020-02-29 20:52:51      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:string   extends   bsp   别名   种类型   length   isp   console   指定   

定义:不预先确定的数据类型,具体的类型在使用的时候才能确定

好处:1.函数和类可以支持多种类型,增加的程序的可扩展性
           2.不必写多条函数重载,联合类型声明,增强代码的可读性
           3.灵活控制类型之间的约束 

这里可以 把泛型理解为代表类型的参数

  • 泛型函数

// 泛型函数
function log<T>(value: T): T {
    return value
}
log<string[]>([‘a‘,‘b‘]) // 根据约束的类型带入函数
log([‘a‘,2]) // 可通过TS自身的类型推断

// 用类型别名来实现泛型函数
type Log = <T>(value: T) => T
let mylog: Log = log // 具体实现可指定到log函数
  • 泛型接口

interface Log1 {
    <T>(value: T): T // 与类型别名方式等价
}
interface Log2<T> { // 当泛型变量约束整个接口的话,实现时必须指定一个类型
    (value: T): T 
}
let mylog1: Log2<number> = log
mylog1(1)
  • 泛型类

看上去与泛型接口差不多。 泛型类使用( <>)括起泛型类型,跟在类名后面。

class Log3<T> {
    run(value: T) {
        console.log(value)
        return value
    }
}
let log1 = new Log3<number>()
log1.run(1)
let log2 = new Log3() // 当不指定参数类型,则可以传入任意类型
log2.run(‘a‘) 
  • 泛型约束

interface Length {
    length: number
}
function log<T extends Length>(value: T): T {
    console.log(value, value.length)
    return value
}
log([]) // 有length属性即可调用
log(‘11‘)
log({length: 1})

 

 

总结
  泛型不仅可以保持类型的一致性,又不失程序的灵活性,同时也可以通过泛型约束,控制类型之间的约束。从代码的上来看,可读性,简洁性,远优于函数重载,联合类型声明以及 any 类型的声明。

TypeScript——泛型

标签:string   extends   bsp   别名   种类型   length   isp   console   指定   

原文地址:https://www.cnblogs.com/JessieXie/p/12384938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!