初学TypeScript06(接口 interface)

251 阅读1分钟

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()