泛型的基本使用
//不明确name的类型时使用
//表示定义了一个泛型T,然后传参name是T类型,myFun的返回值也是T类型;当myFun被调用时才能确定T的值
function myFun<T>(name: T): T {
return name
}
myFun<string>('hellow')//T为string类型
myFun<number>(15)//T为number类型
泛型可以同时指定多个
function myFun<T, K>(name: T, age: K): T{
return name
}
myFun<string, number>('tt', 18)//T为string类型,K为number类型
泛型结合interface
interface Inter{
length: number
}
//T extends Inter 表示泛型T必须是Inter的子类
function myFum<T extends Inter>(value: T): number{
return value.length
}
myFum('abc')//'abc'.length 字符串有length属性,符合Inter接口规范
myFum([1,3,9,5,])//[1,3,9,5,].length 数组有length属性,符合Inter接口规范
myFum({length: 5})//{length: 5}.length 该对象有length属性,符合Inter接口规范
泛型结合class
class myClass<T>{
name: T
constructor(name: T){
this.name = name
}
}
const my = new myClass<string>('tm')