typeScript学习笔记4 泛型

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

泛型函数

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

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

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

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

let myLogi:Logi=log
myLogi(1)

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

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

泛型类和泛型约束

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

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

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

你可能感兴趣的:(typeScript学习笔记4 泛型)