1、如T泛型
// T表示泛型
function getData(value: any): any {
return value;
}
getData(123)
//getData('123')
//getData(true)
/**********************************************************************************/
function getData<T>(value: T): T { // T表示泛型 可以保证函数的参数类型和返回值类型一致
return value;
}
getData<number>(123)
//getData<string>('123')
//getData<boolean>(123)
//这里的第一种写法和第二种写法是一样的效果 但是第一种写法使用any就等于放弃了类型检查
2、泛型类
class Demo {
getValue(val:number):number {
return val
}
}
let demo = new Demo();
console.log(demo.getValue(1)); //1
//这里的 Demo 只能传入number 类型的参数 不能传入string
//这种情况下 可以用泛型类
/**********************************************************************************/
class Demo<T> {
getValue(val:T):T {
return this.a+val
}
}
let demo = new Demo<number>();
console.log(demo.getValue(1)); //1
let demo2 = new Demo<string>();
console.log(demo.getValue('2')); //2
3、泛型接口
泛型接口的第一种写法
interface Demo{
T(val?:T)T
}
let getData:Demo=function<T>(value:T):T{
return value
}
getData<string>('12356')
getData<number>(12356)
getData<number>('123456') //错误写法
泛型接口的第二种写法
interface Demo<T>{
(val?:T)T
}
function getData<T>(value:T):T{
return value
}
let myGetData:Demo<string>=getData;
myGetData('20')
myGetData(20) //错误写法