TS的泛型,接口,约束

97 阅读2分钟

TypeScript知识点

//定义一个求和的函数
 function sum(n1:number,n2:number){
    return n1+n2
 }
sum(10,20)
//声明变量有多种类型
//联合类型
let a1:string|number ='hello'
a1 = 100

//任意类型  any
let a2:any =true
a2:1;
a2='hello'

//数组
let arr1:number[] = [1,2,3,4,5]; //后面中括号里面的值必须为number类型
let arr2:string[] = ['a','b','c']; //中括号里面的内容必须都为字符串类型
let arr3:(number|string)[] = [1,2,3,'a','c'];

//function 输入类型  输出类型
function f1(x:number,y:number):number{
    return x+y
}
f1(20,'30') //不符合要求,会报错

function f2(a,b):void{ //void 代表的是无返回值
    if(a>b){
        
    }else{
        
    }
}

function f1(x:number,y:number):boolean{
    return x===y   //返回的是布尔值
}


对象的类型----接口

在面向对象语言中,接口(interfaces)是一个很重要的概念,它是对行为的抽象接口(interfaces) 可以用于对[对象的形状(Shape)] 进行描述

​ 接口相当于一个约束,让对象遵循约束

接口的定义

接口首字母大写
interface Person{ 
  name:string;
  age:number; //必须属性
  sex?:string // 可选属性
  [propName:string]:any;//任意属性
}

const 02:Person ={
    name:'o2',
    age:18
}

TS中的泛型

<泛型变量名称>(参数1: 泛型变量, 参数2: 泛型变量, ...参数n: 泛型变量) => 泛型变量

泛型: 是指在定义函数,接口或类的时候,不预先指定具体的类型,而在使用的时候在指定类型的一个特性

泛型变量T T表示任何类型

 function f4(x:number,y:number):number[]{  //返回的是一个number类型的数组
     return[x,y]
 }
f4(10,20)

 function f5(x:string,y:string):string[]{//返回的是一个字符串类型的数组
     return[x,y]
 }
f5('a','c')

 function f6(x:boolean,y:boolean):boolean[]{//返回的是一个布尔类型的数组
     return[x,y]
 }
f6(true,false);

//泛型

 function f7<T>(x:T,y:T):T[]{ //泛型变量 T  T代表任何类型
     return[x,y]
 }
f7<number>(1,2);
f7<string>('x','y');
f7<boolean>(true,false);

//
function f8(x:string):number{
    return x.length
};
f8('hello itlove')

function f9<T>(x:T):number{ //会报错,我们要用到约束
    return x.length
};
f9<string>('hello itlove')

泛型的约束

泛型的约束:我们定义一个接口来描述约束条件。 泛型可以通过 extends 一个接口来实现泛型约束,写法如:<泛型变量 extends 接口>


//泛型约束  extends
 interface Length{
     length:number;
 }
function f10<T extends LengthNum>(x:T):number{ //会报错,我们要用到约束
    return x.length
};
f10('hello itlove')

泛型接口

//定义函数,判断传入的参数是否相等
let fn1 =function(s1,s2){
    return s1===s2
};
fn1('a','b');

let fn2 =function(s1:string,s2:string):boolean{
    return s1===s2
};
fn2('a','b');

//另一个函数
let fn3 =function(x,y){
    if(x>y){
        return true
    }else{
        return false
    }
};

let fn4 =function(x:string,y:string):boolean{
    if(x>y){
        return true
    }else{
        return false
    }
};

//定义规范
interface InspectFn{
    // (x:string,y:string):boolean;
     <T> (x:T,y:T):boolean;

}
//将上面的规范运用到下面的代码中
let fn1:InspectFn =function(s1,s2){
    return s1===s2
};
 //fn1('a','b');
fn1<string>('a','b');

//
let fn3:InspectFn =function(x,y){
    if(x>y){
        return true
    }else{
        return false
    }
};
fn3<number>(10,5)