一、什么是泛型
在定义函数,定义接口或定义class类的时候,不先规定其类型,在使用的时候进行定义类型。
二、使用
1、定义函数:
// 函数类型
function AA<T>(arg:T):T{
return arg
}
AA<number>(1)
AA<string>('li')
// length的使用
// 方法一
// function fn2<T extends string>(arg:T){
// return arg.length
// }
// fn2<string>('lisi')
// 方法二
interface Is{
length:number
}
function fn2<T extends Is>(arg:T){
return arg.length
}
fn2<string>('lisi')
console.log(fn2<string>('lisi'),'3333')
// 多类型联合声明
function fn3<T,U>(a:T,b:U) {
return a
}
fn3<number,string>(1,'lisi')
2、接口泛型
对请求参数和接口返回数据控制类型
interface Ilist{
list:{
id:number;
name:string
}[]
}
interface Idata{
message:string;
ok:number;
data:Ilist
}
let data1:Idata = {
message:'成功',
ok:200,
data:{
list:[
{
id:1,
name:'张三'
},
{
id:1,
name:'张三'
}
]
}
}
3、class泛型
// class泛型
// class Person2{
// useName:string
// useAge:number
// constructor(name,age){
// this.useName = name
// this.useAge = age
// }
// }
// const p = new Person2('张三',3)
class Person2<T,U>{
useName:T
useAge:U
constructor(name:T,age:U){
this.useName = name
this.useAge = age
}
}
const p = new Person2<string,number>('张三',3)