什么是接口
接口类似于抽象类,只不过他更加彻底,只提供标准却完全不实现细节。具体表现在,成员字段不可以赋值初始化,方法不可以实现。用来约束对象、函数以及类的结构和类型
定义接口
使用 interface 定义接口
interface Person{
name:string
age:number
run():string
}
实现接口
class Man implements Person{
name:string
age:number
constructor(name:string,age:number){
this.name=name
this.age=age
}
run():string{
return this.name+""+this.age
}
}
接口可以继承另一个接口
interface Person {
name:string
age:number
run():string
}
interface ABC extends Person{
def():string
}
class Man implements ABC{
name:string
age:number
constructor(name:string,age:number){
this.name=name
this.age=age
}
run():string{
return this.name+""+this.age
}
def():string{
return "def"
}
}
接口类型
对象的接口类型
接口也可以作为一种类型,用接口定义对象。
interface Person{
name:string
age:number
run():string
}
//对象字面量
let man:Person={
name:"Mr.Lee",
age:100,
run(){
return this.name+"的年龄为"+this.age
}
}
console.log(man.run)
接口的字段也可以是任意属性
interface Person {
[attrName:string]:any
}
let man:Person={
name:"Mr.Lee",
age:100,
gender:"男"
}
中括号里面的attrName是指对象中的属性名,其后面的string是指属性名的类型,只支持两种类型string和number,如果是number类型,要写成下面这种形式
interface Person {
[attrName:number]:any
}
let man:Person={
1:"Mr.Lee",
2:100,
3:"男"
}
中括号外面的冒号后面的any是指值的类型
函数的接口类型
用接口规范函数的结构,用接口定义函数。
interface Add {
(x: string, y: string): string
}
let add:Add=(a,b)=>a+b
联合类型的接口
接口中可以定义函数,也可以定义对象
interface Lib{
():void;
name:string;
doSomething():void;
}
let lib:Lib=(()=>{}) as Lib; //此处需要进行类型断言,否则会报错
lib.name="svb",
lib.doSomething=()=>{}
接口继承接口
interface shap {
color:string;
}
interface square extends shap{
sideLength: number;
}
let mySquare:square = {
color:'red',
sideLength:10,
};