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)); //1let 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) //错误写法
