1、简介
接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要有由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。
2、接口的定义
interface interface_name {
}
实例:
interface IPerson { firstName:string, lastName:string, sayHi: ()=>string
} var customer:IPerson = { firstName:"Tom",lastName:"Hanks", sayHi: ():string =>{return "Hi there"}
} console.log("Customer 对象 ")
console.log(customer.firstName)
console.log(customer.lastName)
console.log(customer.sayHi()) var employee:IPerson = { firstName:"Jim",lastName:"Blakes", sayHi: ():string =>{return "Hello!!!"}
} console.log("Employee 对象 ")
console.log(employee.firstName)
console.log(employee.lastName)
执行结果:
Customer 对象TomHanksHi thereEmployee 对象JimBlakes
以上实例我们定义一个接口Iperson,接着定义了一个变量customer,它的类型是IOperson。
Customer实现了接口Ioperson的属性和方法。
注意:接口不能JavaScript,它知识TypeScript的一部分。
3、联合类型和接口
实例:
interface RunOptions { program:string; commandline:string[]|string|(()=>string);
} // commandline 是字符串
var options:RunOptions = {program:"test1",commandline:"Hello"};
console.log(options.commandline) // commandline 是字符串数组
options = {program:"test1",commandline:["Hello","World"]};
console.log(options.commandline[0]);
console.log(options.commandline[1]); // commandline 是一个函数表达式
options = {program:"test1",commandline:()=>{return "**Hello World**";}}; var fn:any = options.commandline;
console.log(fn());
执行结果:
Hello
Hello
World
**Hello World**
4、接口继承
接口继承就是说接口可以通过其他接口来扩展自己。
Typescript 允许接口继承多个接口。
继承使用关键字 extends。
单接口继承语法格式:
Child_interface_name extends super_interface_name
多接口继承语法格式:
Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name
继承的各个接口使用逗号 , 分隔。
1)、单继承实例:
interface Person { age:number
} interface Musician extends Person { instrument:string
} var drummer = <Musician>{};
drummer.age = 27
drummer.instrument = "Drums"
console.log("年龄: "+drummer.age)
console.log("喜欢的乐器: "+drummer.instrument)
执行结果:
年龄: 27
喜欢的乐器: Drums
2)、多继承实例
interface IParent1 { v1:number
} interface IParent2 { v2:number
} interface Child extends IParent1, IParent2 { }
var Iobj:Child = { v1:12, v2:23}
console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)
执行结果:
value 1: 12 value 2: 23