typescript-接口

接口?

北鼻,送你一组接口便于你的理解

接口的作用

在面向对象的编程中,接口是一种规范的定义,他定义了行为和动作的规范,在程序设计中,接口起到了一种限制和规范的作用,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关系这些类方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需求。

属性类接口

1.TS定义方法传入参数, 对指定参数约束它的数据类型

function printLabel(val:string):void{
  console.log(val)
}
printLabel('哈哈')  //  正确写法
printLabel(123)     // 错误写法

2.TS自定义方法传入参数对JSON的约束

// 定义传入的JSON参数必须含有一个name为字符串的对象
function printLabel(userInfo:{name:string}):void{
  console.log(userInfo)
}
printLabel({name:'大盘鸡拌面'})  // 正确的写法
printLabel('哈哈')  //  错误写法

3.对批量方法传入参数进行约束

要求:必须传入对象,参数1:firstName;参数2: lastName;并且两个参数必须是string类型(必须传入的两个参数)

// 接口的定义(传入对象的约束)
interface FullName{
  firstName:string;  // 注意分号结束
  lastName:string;
  // lastName?:string;  //可选属性,可传可不传
}
function printName(name:FullName){
  console.log(name)  
}
function printInfo(name:FullName){
  console.log(name)  
}
let obj = {
  firstName: '杨',
  lastName: '过'
}
printName(obj);
printInfo(obj);

函数类接口

对方法传入的参数,以及返回值进行约束(批量约束)

//模拟加密的函数类型接口
interface encrypt{
  (key:string,value:string):string;
}
// 模拟操作
var md5:encrypt = function(key:string,value:string):string{
  return key+value;
}
var sha1:encrypt = function(key:string,value:string):string{
  return key+'----'+value;
}
md5('name', 'zhangsan');
sha1('name', 'lisi')

可索引接口,数组,对象的约束

上篇文章介绍过就不过多介绍了
var arr:number[] = [12,12]

1.数组的约束
// 接口的定义
interface UserArr{
  [index:number]:string
}
var arr:UserArr = ['1','2']  //  正确写法
var arr:UserArr = [1,'2']    //  错误写法
2.对象的约束
interface UserObj{
  [index:string]:string
}
var obj:UserObj = {
  name: '张三'
}

类类型接口: 对类的约束(相似与抽象类)

关键字(implements)实现接口

interface Animal{
  name:string;
  eat(str:string):void;
}
class Dog implements Animal{
  name:string;
  constructor(name:string){
    this.name = name;
  }
  eat(){
    console.log(this.name+'在吃饭')
  }
}
var d = new Dog('小黑');
d.eat()  // 小黑在吃饭

接口的拓展

接口的继承

interface Animal{
  eat():void;  // 参数可传可不传
}
// Person 接口继承 Animal接口
interface Person extends Animal{
  work():void;
}
// 实现Person接口
class Web implements Person {
  public name:string;
  constructor(name:string){
    this.name = name
  }
//定义了两个方法,所以都要写 (eat方法和work方法)
  eat(){    
    console.log(this.name+'在吃大盘鸡拌面')
  }
  work(){
    console.log(this.name+'在打代码')
  }
}
var p = new Web('李四')
p.work()    // 李四在打代码

类的继承结合接口继承

interface Animal{
  eat():void; 
}
interface Person extends Animal{
  work():void;
}
class Progrommer{
   public name:string
   constructor(name:string){
    this.name = name;  
  }
  coding(code:string){
    console.log(this.name + code)
  }
}
class Web extends  Progrommer implements Person {
  public name:string;
  constructor(name:string){
    this.name = name
  }
  eat(){    
    console.log(this.name+'在吃大盘鸡拌面')
  }
  work(){
    console.log(this.name+'在打代码')
  }
}
var p = new Web('小李');
w.coding('在写ts代码')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类...
    凌统丶阅读 502评论 0 1
  • TypeScript接口 接口只读属性 使用关键字readonly定义只读的接口属性 出现错误,如下 创建不可修改...
    小小小8021阅读 680评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • TypeScript 的核心原则之一是对值所具有的结构进行类型检查。它有时被称做“鸭式辨型法”或“结构性子类型化”...
    nomooo阅读 1,223评论 0 3
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13