typeScript学习笔记4 泛型

泛型:不预先确定数据类型,具体的类型在使用的时候才确定。
好处:函数和类可以轻松支持多种类型;不必写多条函数重载;灵活控制类型之间的约束

泛型函数

// function log(value:any):any{
//     console.log(value)
//     return value
// }

function log<T>(value:T):T{//为泛型函数:对比上面使用any的好处是能保证输入和输出为同一类型
    console.log(value)
    return value
}
//两种调用方式
log<string[]>(['a','b'])
log(['a','b'])//第二种省略是利用ts的类型推断

//
type Log=<T>(value:T)=>T
let log1:Log=log

//泛型接口
interface Logi<T>{//所有成员都可以受到泛型约束
    (value:T):T
}

let myLogi:Logi<number>=log
myLogi(1)

//泛型接口
interface Logy<T=string>{//所有成员都可以受到泛型约束
    (value:T):T
}

let myLogy:Logy=log
myLogy('1')

泛型类和泛型约束

//泛型类
class Logc<T>{
    run(value:T){
        console.log(value)
        return value
    }
}

let myLogc1=new Logc<number>()
myLogc1.run(1)
let myLogc2=new Logc()//没有指定类型就可以传任意类型
myLogc2.run(['2'])

//泛型约束
interface Length{
    length:number
}
function logfn<T extends Length>(value:T){//输入的参数必须要有length属性才合法
    console.log(value)
    return value
}
logfn([1,2])
logfn('logfn')
logfn({length:9})

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容