当前位置: 首页 > news >正文

《Typecript 入门教程》 3、接口

转载:《TypeScript 中文入门教程》 3、接口

介绍

TypeScript的核心原则之一是对值所具有的shape进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。

在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

接口用法一:方法的参数的类型声明

当你的接口用作一个方法的类型参数声明时,当你在调用此方法时,你要满足此接口的参数要求
下面代码中,Iperson接口作为了Person类构造函数内的变量类型声明,要求必须传入属性为一个包含name、sex的json数组
interface Iperson{
    name:string;
    sex:string;
}

class Person{
    constructor(public config:Iperson){

    }
}

let a=new Person({
    name:"chenli",
    sex:"man"
});

接口用法二:参数类型中的可选属性

带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。

接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 可选属性在应用“option bags”模式时很常用,即给函数传入的参数对象中只有部分属性赋值了。

interface Animals{
    color?:string;
    size?:number;
}

function creatAnimal(ani:Animals):{color:string;size:number}{
    var anitemp={
        color:"blue",
        size:10
    }
    if(ani.color){
        anitemp.color=ani.color;
    }
    if(ani.size){
        anitemp.size=ani.size;
    }
    return anitemp;
}

var myAnimal=creatAnimal({color:"white"});
接口用法3.使用接口定义函数类型

接口能够描述JavaScript中对象拥有的各种各样的外形。 除了描述带有属性的普通对象外,接口也可以描述函数类型。

为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。

interface SearchFunc{
    (source:string,subString:string):boolean;
}

var mySearch:SearchFunc;
mySearch=function(source:string,subString:string){
    var result=source.search(subString);
    if(result==-1){
        return false;
    }
    else{
        return true;
    }
}

这样定义后,我们可以像使用其它接口一样使用这个函数类型的接口。 下例展示了如何创建一个函数类型的变量,并将一个同类型的函数赋值给这个变量。对于函数类型的类型检查来说,函数的参数名不需要与接口里定义的名字相匹配。 比如,我们使用下面的代码重写上面的例子:

var mySearch: SearchFunc;
mySearch = function(src: string, sub: string): boolean {
  var result = src.search(sub);
  if (result == -1) {
    return false;
  }
  else {
    return true;
  }
}

 

接口用法4:class类型。接口和类配合,通过子类实现接口完成具体的应用,给出具体的框架规范
interface ClockInterface{
    currentTime:Date;
}

class Clock implements ClockInterface{
    // 类实现了接口,那么类里面必须复写接口内的参数
    currentTime:Date;
    constructor(h:number,m:number){

    }

}

你也可以在接口中描述一个方法,在类里实现它,如同下面的setTime方法一样:

interface ClockInterface {
    currentTime: Date;
    setTime(d: Date);
}

class Clock implements ClockInterface {
    currentTime: Date;
    setTime(d: Date) {
        this.currentTime = d;
    }
    constructor(h: number, m: number) { }
}

 

转载于:https://www.cnblogs.com/fighxp/p/7753075.html

相关文章:

  • 《把时间当朋友》 读书笔记
  • 在开发中你可能没有考虑到的两个性能优化
  • Kali***(二)之被动信息收集——搜索引擎
  • 编码格式导致批处理文件bat文件不能执行
  • 我的信仰
  • 陶哲轩实分析公理8.1——选择公理
  • C# 小测试(一):类成员初始化与构造函数执行的顺序
  • debian中安装和编译ipvsadm问题
  • kubernetes 1.8 高可用安装(三)
  • Putty中为CentOS 5.5配置SSH证书登录验证(转)
  • 写JS的时候,想强制刷新页面,有些代码却不能很好的兼容
  • 选eMTC还是NB-IoT,不应该再是一个问题
  • HTML教程
  • 总结: 在fc23中, 安装音频mp3 视频flv 的播放插件其实很简单, 只要一步就可以了: dnf install gstreamer1-libav...
  • jxl操作excel(每页200个,每行4个)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【剑指offer】让抽象问题具体化
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • E-HPC支持多队列管理和自动伸缩
  • JDK 6和JDK 7中的substring()方法
  • js对象的深浅拷贝
  • learning koa2.x
  • PHP 小技巧
  • 从零搭建Koa2 Server
  • 精彩代码 vue.js
  • 深度学习中的信息论知识详解
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 首页查询功能的一次实现过程
  • 再次简单明了总结flex布局,一看就懂...
  • hi-nginx-1.3.4编译安装
  • Prometheus VS InfluxDB
  • ​iOS安全加固方法及实现
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # .NET Framework中使用命名管道进行进程间通信
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (八)Flask之app.route装饰器函数的参数
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (六)vue-router+UI组件库
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (译)2019年前端性能优化清单 — 下篇
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (轉貼) UML中文FAQ (OO) (UML)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .java 9 找不到符号_java找不到符号
  • .net wcf memory gates checking failed
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下