TypeScript 接口

接口定义行为和动作的规范

1.属性接口

//传入对象 要带有label 并且label的值为string类型
function printLabel(labelInfo:{label:string}):void{
    console.log('接口函数')
}

printLabel({label:'登记'})

1.属性接口 规定了传入参数的值必须包含哪几项

//属性接口,规定了传入参数的值
//传入值的时候 严格按照接口来,接口让穿啥就穿啥

interface FullName{
  firstName:string; //注意以;结束
  secondName:string;
}

function printName(name:FullName){
  //必须传入对象,要有firstName secondName
  alert(name.firstName + name.secondName)
}

var obj = {
  age:23,
  firstName:"王",
  secondName:'金毅'
}

printName(obj)

接口可选属性

interface FullName{
  firstName:string;
  secondName?:string;//secondName可传可不传
}

function pringName(name:FullName):void{
  alert(name.firstName + name.secondName)
}

let obj = {
  age:10,
  firstName:'王'
}

pringName(obj)

函数类型接口

//函数类型接口:对方法传入的参数 以及返回值进行约束
//例子: 加密的函数类型接口

interface encrypt{
  (key:string,value:string):string
}

var md5:encrypt = function(key:string,value:string):string{
  //模拟
  return key+value
}

console.log(md5('key密码','value密码'))

可索引接口

//可索引接口 对数组和对象 约束(用处少)
interface UserArr{
    [index:number]:string;
}
//规定数组的索引为 number 类型  数组中的值 为string类型
var arr1:UserArr = ['123','123']
//可索引接口 对 对象的约束(不常用)
interface UserObj{
    [index:string]: string;
}

var arr1:UserObj = {name:'wangjinyi'}

类类型接口

总结:接口和接口之间叫继承(使用extends关键字),类和接口之间叫实现(使用的是implements关键字)

//类类型接口 对类进行约束  和抽象类 相似
//父类定义标准化 流程
//必须有string 类型的name  和eat方法
interface Anmial{
  name:string;
  eat(str:string):void;
}

class Dog implements Anmial{
  name:string
  constructor(name:string){
    this.name = name
  }
  eat(){
    console.log(this.name + '吃肉')
  }

} 

var d = new Dog('哈士奇')
d.eat();


//一个类可以实现多个接口
  interface Animal{
    name:string,
    eat(str:string,food:string):void
  }

  interface AnimalAge{
    age:number,
    myAge(Num:number):void
  }


  class Dog implements Animal,AnimalAge{
    name:string
    age:number
    constructor(name:string,age:number){
      this.name = name
      this.age = age
    }
    eat(food:string){
      console.log(`${this.name}在吃${food}`)
    }
    myAge(){
      console.log(`${this.name}今年${this.age}岁了`)
    }
  }

  const dog1 = new Dog('哈士奇',12)
  dog1.eat('牛排 ');
  dog1.myAge();
  
  //一个接口可以继承多个接口
  
    //定义一个接口,用来继承多个接口
  interface AnimalALL extends Animal,AnimalAge{}

  class Cat implements AnimalALL{
    name:string
    age:number
    constructor(name:string,age:number){
      this.name = name
      this.age = age
    }
    eat(food:string){
      console.log(`${this.name}在吃${food}`)
    }
    myAge(){
      console.log(`${this.name}今年${this.age}岁了`)
    }
  }

  const cat1 = new Cat('马达',3)
  cat1.eat('猫粮罐头');
  cat1.myAge();

接口继承

//接口继承 接口继承接口

// 接口继承中  最后拥有所继承接口中的所有规范
interface Animal{
  eat(str:string):void
}

interface People extends Animal{
  work(str:string):void
}

class Web implements People{
  name:string
  constructor(name:string){
    this.name = name
  }

  eat(){
    console.log('这个是Animal接口中的eat方法')
  }

  work(){
    console.log('这个是People接口中的work方法')
  }

}

var 人 = new Web('王金印')
人.eat();

例子:即使用继承,又实用类类型接口

// 接口继承中  最后拥有所继承接口中的所有规范
interface Animal{
  eat(str:string):void
}

interface People extends Animal{
  work(str:string):void
}

class Coder{
  public name:string
  constructor(name:string){
    this.name = name
  }
  code(codeing:string){
    console.log(this.name+codeing) 
  }
}

class Web extends Coder implements People{ //即使用继承 又实用接口
  constructor(name:string){
    super(name)
  }

  eat(){
    console.log('这个是Animal接口中的eat方法')
  }

  work(){
    console.log('这个是People接口中的work方法')
  }

}

var 人 = new Web('王金印')
人.eat();
人.code('在写ts代码')
1

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 前言 在面向对象的编程中,接口是一种定义行为和动作的规范。在程序设计里面,接口起到限制和规范的作用,定义了某一...
    酷酷的凯先生阅读 433评论 0 0
  • 接口? 接口的作用在面向对象的编程中,接口是一种规范的定义,他定义了行为和动作的规范,在程序设计中,接口起到了一种...
    一号聪明阅读 359评论 0 0
  • 本文关键字: interfaceastypepublicprivateprotectedreadonlystati...
    _一九九一_阅读 467评论 0 0
  • 一、什么是接口? TypeScript的核心原则之一是对值所具有的结构进行类型检查,它有时被称作“鸭式辨型法”或“...
    听书先生阅读 702评论 0 3
  • TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”...
    2o壹9阅读 659评论 0 48