前言:
只是一篇学习笔记!!!
正文:
泛型:指在定义函数、接口或类的时候,不预先指定具体类型,而在使用的时候再指定类型。
//泛型函数
//需求:创建一个方法使返回值的类型与传入参数的类型相同
function getSameType<T>(value:T):T{return value
}
console.log(getSameType(<number> 2)) //在使用的时候要指明类型,其实可以不指明,ts会进行类型推断
console.log(getSameType(<string>'4'))
在使用泛型变量的时候,必须把这些变量当做任意或所有类型。
function getSameType<T>(value:T):number{return value.length //类型T上不存在属性“lebgth”
}
console.log(getSameType(<string>'123')) //即使在使用的时候指定的类型存在length属性,还是报错
解决方案:(使用接口约束类型)
interface Itype{length:number
}
function getSameType<T extends Itype>(value:T):number{return value.length
}
getSameType(<string>'123')
getSameType(<Array<number>>[1,2,3])
getSameType(<number>123) //类型"number"的参数不能赋给类型"Itype"的参数
定义接口:(在使用接口的时候指定类型)
方式一:
interface IArr{<T>(value:T,count:number):Array<T> //定义函数的格式
}
const getArr1:IArr = function <T>(value:T,count:number):T[]{}
方式二:
interface IArr<T>{(value:T,count:number):Array<T>
}
const getArr1:IArr<string> = function <T>(value:T,count:number):T[]{ //在使用接口的时候就要确定类型}
// 定义接口
interface Idata{id:number,title:string,content:string,createTime:string
}
interface Itest<T>{code:T,data:Idata,message:string
}
function responseFn<U>(arg:U,count:number):Itest<number>{ //在使用的时候要指定类型let newArr:U[] = []for(let i = 0; i<count;i++){newArr.push(arg)}console.log(newArr)return {code:200,data:{id:1,title:'test1',content:'test1',createTime:'2022-01-02'},message:'成功'}
}
let test1 = responseFn(<string>'2',2)
console.log(test1)
let test2 = responseFn(<number> 2 ,4)
console.log(test2)