/* 接口interface的作用:在面向对象的编程中,接口是一种规范的定义,定义了行为和动作的规范,
在程序设计里面,接口起到限制和规范作用,接口定义了某一批类所需要遵守的规范,接口不关心类
的内部状态数据,也不关心类里面方法的实现细节,之规定类里面必须提供默写方法,提供这些方法
的类就可以满足需求。ts中的接口类似于java,同时还增加了更灵活的接口类型,包括属性、函数、
可索引和类等*/
//1、属性接口 对json的约束
//对批量方法传入参数进行约束
//接口:行为和动作的规范,对批量方法进行约束
interface FullName{
firstName:string;
secondName:string;
age?:number //可选参数
}
function printName(name:FullName){
alert(`${name.firstName}--${name.secondName}`)
}
printName({
firstName:'李',
secondName:'四'
})
let obj={
firstName:'张',
secondName:'三',
age:30
}
printName(obj)
//2、函数类型接口 对方法传入的参数以及返回值的约束
//例如:加密的函数类型接口
interface encrypt{
(key:string,value:string):string
}
var md5:encrypt=function(key:string,value:string):string{
return key+value
}
console.log(md5('name','Tom'))
//3、可索引接口:数组、对象的约束(不常用)
//对数组的约束
interface UserArr{
[index:number]:string //索引值 value
}
var array:UserArr=['A','B'] //正确
// var array:UserArr=[1,2] //错误
//对对象的约束
interface UserObj{
[index:string]:string //索引值 value
}
var O:UserObj={
name:'张三'
}
//4、类类型接口:对类的约束 和抽象类有点相似
interface Animals{
name:string;
eat(str:string):void
}
class Dogs implements Animals{
name:string;
constructor(name:string){
this.name=name
}
eat(){
alert(this.name+"eat meat")
}
}
var dogs=new Dogs('dog')
dogs.eat()
class Cats implements Animals{
name:string;
constructor(name:string){
this.name=name
}
eat(food:string){
alert(this.name+"eat"+food)
}
}
var cats=new Cats('Cat')
cats.eat('mice')
//接口扩展:接口可以继承接口
interface Animals2{
eat():void
}
interface Persons extends Animals2{
work():void
}
class Humans implements Persons{
public name:string;
constructor(name:string){
this.name=name
}
eat(){
alert(this.name+'eat lanuch')
}
work(){
alert(this.name+'work 996')
}
}
let h=new Humans('tom')
h.eat()
h.work()
//继承结合接口
class Programmer{
public name:string;
constructor(name:string){
this.name=name;
}
workType(type:string){
alert(`${this.name} workType is ${type}`)
}
}
class ManFild extends Programmer implements Persons{
constructor(name:string){
super(name);
}
eat(){
alert(this.name+'eat dinner')
}
work(){
alert(this.name+'work 007')
}
}
let Man=new ManFild('Jimmy')
Man.workType('产品经理')
Man.eat()
Man.work()