1 接口的定义
自己理解的讲 相当于定义了一个新的类型规范 这个类型要求你必须有的变量或者方法,那么你在使用函数或者类定义为接口类型时 就必须含有 否则报错。
// 接口基本原理
function people(params:{name:string}):void {
console.log(params.name)
}
people({name:'小明'})
interface People {
name:string;
age:number;
sex?:string //可选属性
}
function Name(params:People):void {
console.log(params)
console.log(params.name+params.age+params.sex)
}
let para = {
name:'张三',
age:18,
sex:'男'
}
Name( para)
2 函数类型接口
interface People {
(name:string,age:number):string
}
var people:People = function (name:string,age:number):string {
return name+age
}
people('张三',18)
3可索引接口 数组的约束 对象的约束 不常用
interface People {
[index:number]:string
}
var arr:People=['111','222']
interface People {
[index:string]:string
}
var arr:People={
name:'zaz',
sex:'男'
}
可索引接口当然也可用于函数传递任意参数 但是有一个限制 就是当像下面这种情况 必传参数必须是任意的子类
interface People {
namme:string,
[index:any]:string // 定义了任意参数但value必须是string类型 这里如果过改成number 那么name也必须是number
}
4 类类型接口 和 抽象类类似 关键字 implements
interface People {
name:string;
eat(str:string):void
}
class Heiren implements People {
name:string
constructor(name:string) {
this.name = name
}
eat(str:string){}
}
5 接口扩展 接口继承
interface Animal {
eat():void;
}
interface People extends Animal{
run():void
}
class Web implements People {
public name:string;
constructor(name:string) {
this.name=name
}
run():void{
console.log(this.name+"会跑步")
}
eat():void{
console.log(this.name+"会吃东西")
}
}
var p = new Web('小明')
p.run()
p.eat()
//另一个案例 子类继承父类 子接口继承父接口
class Father {
name:string;
constructor(name:string) {
this.name=name
}
look():void{
console.log(this.name+"长了眼睛")
}
}
class Son extends Father implements People {
constructor(name:string) {
super(name)
}
run():void{
console.log(this.name+"会跑步")
super.look()
}
eat():void{
console.log(this.name+"会吃东西")
}
}
var son = new Son('小花')
son.run()
son.eat()