博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript--接口
阅读量:6358 次
发布时间:2019-06-23

本文共 4314 字,大约阅读时间需要 14 分钟。

接口

  1. 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作规范,在程序设计里面,接口起到了一种限制和规范的作用
  2. 接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里面方法的实现细节,它只规定这批类里面必须提供某些方法,提供这些方法的类就可以满足实际需要
  3. typescript中的接口类似于java,同时还增加了更灵活的接口类型,包括属性,函数,可索引和类等

clipboard.png

Typescript中的接口

标准写法

//定义接口interface FullName{    firstName:string;    secodeName:string;}//声明方法,传入的参数为接口中定义的类型function printName(name:FullName){    console.log(name.firstName + name.secodeName);}//调用方法,传入定义好的接口,参数printName({    firstName:'aa',    secodeName:'bb'});

clipboard.png

顺序可调乱

interface FullName{    firstName:string;    secodeName:string;}function printName(name:FullName){    console.log(name.firstName + name.secodeName);}printName({    secodeName:'bbb',    firstName:'aaa',});

clipboard.png

另一种正确写法,传入的参数可比定义的多

interface FullName{    firstName:string;    secodeName:string;}function printName(name:FullName){    console.log(name.firstName + name.secodeName);}var obj = {    age:20,    firstName:'cc',    secodeName:'dd'}printName(obj);

clipboard.png

错误写法

数据类型不一致

clipboard.png

数量不一致

clipboard.png

可选参数?

interface FullName{    firstName:string;    secodeName?:string;}function printName(name:FullName){    console.log(name);}printName({    firstName:'aa'})printName({    firstName:'aa',    secodeName:'bb'})

clipboard.png

属性类型接口(ajax)

interface Config{    type:string;    url:string;    data?:string;    dataType:string;}function ajax(config:Config) {    var xhr = new XMLHttpRequest();    xhr.open(config.type, config.url, true);    xhr.send(config.data);    xhr.onreadystatechange = function () {        if (xhr.readyState == 4 && xhr.status == 200) {            console.log('chengong');            if (config.dataType == 'json') {                console.log(JSON.parse(xhr.responseText));            }            else {                console.log(xhr.responseText);            }        }    };}//可选参数data,不传dataajax({    type: 'get',    url: 'http://a.itying.com/api/productlist',    dataType: 'json'});//可选参数data,传dataajax({    type: 'get',    data: 'name=zhangsan',    url: 'http://a.itying.com/api/productlist',    dataType: 'json'});

clipboard.png

函数类型口

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

可能批量,对应多个方法

interface encrypt{    (key:string,value:string):string;}var md5:encrypt = function(key:string,value:string):string{    return key+value;}console.log(md5('name','lisi'));var sha1:encrypt = function(key:string,value:string):string{    return key+'---'+ value;}console.log(sha1('name','wanwu'));

clipboard.png

可索引接口

数组

正确

interface UserArr{    [index:number]:string}var arr:UserArr=['123','456'];console.log(arr[0]);

clipboard.png

错误

interface UserArr{    [index:number]:string}var arr:UserArr=[123,'bbb'];console.log(arr[0]);

clipboard.png

对象

interface UserObj{    [index:string]:string;}var arr:UserObj= {name:'list'};console.log(arr.name)

clipboard.png

类类型接口

  1. 对类的约束
  2. 和抽象类抽象有点相似,比抽象类更强大
  3. implements为类实现接口
  4. 接口中的属性和方法都要有

正确

interface Animall{    name:string;    eat(str:string):void;}class Dogg implements Animall{    name:string;    constructor(name:string){        this.name = name;    }    eat(){        console.log(this.name+'吃粮食')    }}var dd = new Dogg('小黑');dd.eat();class Catt implements Animall{    name:string;    constructor(name:string){        this.name = name;    }    eat(food:string){        console.log(this.name + '吃' + food);    }}var cc = new Catt('小花猫');cc.eat('老鼠');

clipboard.png

错误

类中没有对应的方法

interface Animall{    name:string;    eat(str:string):void;}class Dogg implements Animall{    name:string;    constructor(name:string){        this.name = name;    }}var dd = new Dogg('小黑');dd.eat();

clipboard.png

接口拓展:接口可以继承接口

一个类实现二个接口

// 动物接口interface Animalll{    eat():void;}//人接口,人属性动物interface Person extends Animalll{    work():void;}//前端类class Web implements Person{    public name:string;    constructor(name:string){        this.name = name;    }    eat(){        console.log(this.name +'吃米粉');    }    work(){        console.log(this.name + '写js');    }}var w = new Web('小李');w.eat()w.work()

clipboard.png

一个类继承父类,并实现2个接口(一个接口继承另一个接口)

// 动物接口interface Animalll{    eat():void;}//人接口,人属性动物interface Person extends Animalll{    work():void;}//程序员类class Programmer{    public name:string;    constructor(name:string){        this.name = name;    }    conding(code:string){        console.log(this.name + code);    }}//前端类class Web extends Programmer implements Person{    constructor(name:string){        super(name)    }    eat(){        console.log(this.name +'吃米粉');    }    work(){        console.log(this.name + '写js');    }}var w = new Web('小李');w.eat()w.work()w.conding('写代码')

clipboard.png

转载地址:http://qsbma.baihongyu.com/

你可能感兴趣的文章
Velocity官方指南-容器
查看>>
国家为何如此重视石墨烯?
查看>>
《Python和Pygame游戏开发指南》——1.14 配套网站上的更多信息
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>
java代码实现开启openoffice服务和关闭sffice.exe进程
查看>>
docker镜像的使用方法
查看>>
提升HTTPS安全评级
查看>>