typescript中的接口

接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要,typescript中的接口类似于java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等

接口也是一种定义标准,分为一下几种:

  • 属性类接口
  • 函数类型接口
  • 可索引接口
  • 类类型接口
  • 接口扩展

属性类接口

我们看一下ts中的自定义方法

//ts中定义方法
function fun(){
    console.log("fun")
}
fun()
//ts中定义方法传入参数 function fun(label:string){ console.log("fun") } //调用时必须传入一个字符串 fun("fun")
//ts中自定义方法传入参数对json约束 function fun(label:{fun:string}){ console.log("fun") } fun("fun") //错误 //调用时必须传入一个对象 fun({name:"小明"})//错误 fun({fun:"小明"}) //正确

我们看一下接口的使用

对传入的对象进行约束

//传入对象的约束,属性接口
interface num{
    first:string;  //注意以;结尾
    second:string;
}
function fun(name:num){
    //必须传入对象,对象里面必须有first,second
    console.log(name.first);
    console.log(name.second)
} 
//fun("123")//错误
// fun({
//     //age:18,//错误,不可以传入不在num中的属性
//     first:"小明",
//     second:"男"
// })
var obj=({     //传入的参数必须包含first和second
        age:18,
        first:"小明",
        second:""
    })
fun(obj)

编译后的js文件

 

 对批量方法进行约束

 

interface num{
    age:number;
    first:string;  //注意以;结尾
    second:string;
}
function fun(name:num){
    //必须传入对象,对象里面必须有first,second
    console.log(name.first);
    console.log(name.second)
} 
function fun2(name2:num){
    console.log(name2.first);
    console.log(name2.second)
    console.log(name2.age)

}
  //参数的顺序可以不一样,但是必须的有num中的属性
var obj=({     //传入的参数必须包含first和second
        age:18,
        first:"小明",
        second:""
    })
fun(obj)
fun2(obj)

编译后的js文件

 

 可选属性

interface num{
    first:string;
    second?:string;
}
function fun(name:num){
    console.log(name)
}
//参数的顺序可以不一样但是必须的有num中的属性
fun({
    first:"小明",
   // second:"小红"   //此时这个属性可传可不传
})

我们可以使用接口封装一个ajax请求

我们一般写ajax请求这样写

 $.ajax({
     type:"GET",
     url:"test.json",
     data:{username:$("#username")},
     datatype:"json"
 })

我们使用接口封装了之后可以这样写

//原生js封装的Ajax请求
interface
ajax{ type:string, url:string, data?:string, datatype:string } function ajax(ajax:ajax){ var xhr=new XMLHttpRequest(); xhr.open("get",ajax.url); xhr.send(ajax.data) xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ console.log("success") if(ajax.datatype=='json'){ JSON.parse(xhr.responseText) }else{ console.log(xhr.responseText) } } } } ajax({ type:'get', data:"name=张三", url:"http://www.baidu.com", datatype:"json" })

函数类型接口

// 函数类型接口,对方法传入的参数,以及返回值进行约束
//加密的函数类型接口
interface entry{

    (key:string,value:string):string;
}

var a:entry=function(key:string,value:string):string{
    //模拟操作
    return key+value;
}
console.log(a("name:","张三"))

注意:这里面的类型要一一对应

 

 编译后的js文件

 可索引接口

ts定义数组的方式

//ts定义数组的方式
var arr:number[]=[1,2,3,4,5];
var arr1:Array<string>=["1","2","3"]

可索引接口第一种写法:

对数组对象的约束(不常用)
interface arr{
    [index:number]:string   //对数组约束的接口,下标为number。value为string
}
var arr1:arr=['1','2','3']
//var arr1:arr=[1,2,3]//错误 console.log(arr1[
0],arr1[1],arr1[2]);

编译后的js文件

 

 对对象的约束

interface obj{
    [index:string]:string
}
var obj1:obj={name:'20'}
console.log(obj1)

编译后的js文件

 

 

 类类型接口

对类的约束,和抽象类有点相似

interface animal{
    name:string;
    eat(name:string):void;
}
class dog implements animal{
    name:string;
    constructor(name:string){
        this.name=name
    }
    eat(){
        console.log(this.name)
    }
}
var d=new dog("大黄")
d.eat()

编译后的js文件

 

 

 

接口扩展

接口可以继承接口

interface animal{
    eat():void
}
interface person extends animal{
    work():void;
}
 class dog implements person{
     name:string;
    constructor(name:string){
        this.name=name
    } 
    eat(){
    console.log(`${this.name}在吃饭`)        
     }
     work(){
         console.log(`${this.name}在工作`)
     }
 }

var d=new dog("大黄")
d.eat()
d.work()

编译后的js文件

 

 

 

 

interface animal{
    eat():void
}
interface person extends animal{
    work():void;
}
class set{
    name:string
    constructor(name:string){
        this.name=name
    }
    code(){

        console.log(`${this.name}在写代码`)
    }
}
 class dog extends set implements person{
    constructor(name:string){
        super(name)
    } 
    eat(){
    console.log(`${this.name}在吃饭`)        
     }
     work(){
         console.log(`${this.name}在工作`)
     }
 }

var d=new dog("大黄")
d.eat()
d.work()
d.code()

编译后的js文件

 

posted @ 2021-11-05 17:00  keyeking  阅读(619)  评论(2编辑  收藏  举报