ts的接口有两种,一个是对象类型接口,一个是函数类型接口
先来看对象类型的接口
interface A{name:string,age:number,sex?:string}
var obj1:A={name:'xx',age:20,sex:'man'}
/* 接口定义了什么属性,该接口类型的对象就只能有这些属性,
如果再添加其他属性则会报错。?表示该属性可以没有*/
interface A{name:string,age:number}
interface B{data:A[]}
var result={data:[{name:'xx',age:20},{name:'yy',age:18,sex:'man'}]}
function fn(result:B):void{
console.log(result)
}
fn(result)
/*本来接口A是没有sex属性的,但是这样写并不会报错
如果直接把result的值带进fn函数则会报错,这时候可以使用泛型或者as关键字进行断言*/
function fn<B>(obj:B):void{
console.log(obj)
}
fn({data:[{name:'xx',age:18},{name:'zz',age:20,sex:'man'}]})
//或者
fn({data:[{name:'xx',age:18},{name:'zz',age:20,sex:'man'}]} as B)
然后是函数类型的接口
interface A{
doSomething():void;
():void;
}
var B:A=(()=>{console.log('hahha')})as A;
B.doSomething=():void=>{console.log('接口')}
//要将B断言为A类型,否则会报错
然后还可以用类实现接口
interface A{
doSomething():void;
name:string;
}
class Test implements A{
constructor(name:string){
this.name=name;
}
public name:string;
doSomething():void{
console.log('实现A接口')
}
}
接口还可以继承接口
interface A{
doSomething():void;
name:string;
}
interface B extends A{
age:number;
doSomething():number;
name:any;
}
//B接口也有A接口的属性,可以重写A接口的属性和方法,但是属性只能设置包含A接口属性类型在内的的类型