TypeScript入门-接口


Posted in Javascript onMarch 30, 2017

大致介绍

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

接口

例子:

function printLabel(labelledObj: { label: string }) {
   console.log(labelledObj.label);
  }
  let myObj = { size: 10, label: "Size 10 Object" };
  printLabel(myObj);

printLabel函数有一个参数,要求这个参数是个对象,并且有一个属性名为label的类型为string的属性

有时我们会传入多个参数,但是只检测指定的参数有没有

用接口来实现上面的例子:

interface LabelledValue {
   label: string;
  }
  function printLabel(labelledObj: LabelledValue) {
   console.log(labelledObj.label);
  }
  let myObj = {size: 10, label: "Size 10 Object"};
  printLabel(myObj);

注意:要用到关键字 interface

可选属性

有时接口里的属性不是必须的是可选的,那么只要加个?就可以了

interface SquareConfig {
   color?: string;
   width?: number;
  }
  function createSquare(config: SquareConfig): {color: string; area: number} {
   let newSquare = {color: "white", area: 100};
   if (config.color) {
    newSquare.color = config.color;
   }
   if (config.width) {
    newSquare.area = config.width * config.width;
   }
   return newSquare;
  }
  let mySquare = createSquare({color: "black"});

上面的代码中 config:SquareConfig规定了函数参数, {color: string;area: numner}规定了函数返回值的类型

使用可选属性的好处:

1、可以对可能存在的属性进行定义

2、可以捕获访问不存在的属性时的错误

只读属性

如果向让一个值只读,不可以修改就可以使用readonly

interface Point {
    readonly x: number;
    readonly y: number;
  }
  let p1: Point = { x: 10, y: 20 };
  p1.x = 5; // error!

TypeScript具有ReadonlyArray<number>类型,它与Array<T>相似,只是把怕有可变方法去掉了,因此可以确保数组创建后再也不能被修改:

let a: number[] = [1, 2, 3, 4];
  let ro: ReadonlyArray<number> = a;
  ro[0] = 12; // error!
  ro.push(5); // error!
  ro.length = 100; // error!
  a = ro; // error!

额外的属性检查

看一个例子:

interface SquareConfig {
    color?: string;
    width?: number;
  }
  function createSquare(config: SquareConfig): { color: string; area: number } {
    // ...
  }
  let mySquare = createSquare({ colour: "red", width: 100 });

起初会认为这个是对的,接口定义了两个可选属性color和width。函数实际传入了width属性和一个接口没有定义的colour属性,但是这段代码会报错。

对象字面量会被特殊对待而且会经过额外属性检查,当将它们赋值给变量或作为参数传递的时候。 如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误。

最好的解决办法就是添加一个字符串索引签名

interface SquareConfig {
    color?: string;
    width?: number;
    [propName: string]: any;
  }

函数类型

例子:

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

可索引的类型

可索引类型比如a[10]或obj['a']。 可索引类型具有一个索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。

interface StringArray {
   [index: number]: string;
  }
  let myArray: StringArray;
  myArray = ["Bob", "Fred"];
  let myStr: string = myArray[0];

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
flash遮住div问题的正确解决方法
Feb 27 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
js实现验证码功能
Jul 24 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 Javascript
如何编写jquery插件
Mar 29 #jQuery
基于JavaScript实现瀑布流效果
Mar 29 #Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 #Javascript
JS变量及其作用域
Mar 29 #Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 #Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 #Javascript
vue2组件实现懒加载浅析
Mar 29 #Javascript
You might like
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
PHP面向对象概念
2011/11/06 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
如何使用python操作vmware
2019/07/27 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Python 绘制可视化折线图
2020/07/22 Python
Python代码注释规范代码实例解析
2020/08/14 Python
利用python爬取有道词典的方法
2020/12/08 Python
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
大学生毕业自我评价范文分享
2013/11/07 职场文书
学生思想表现的评语
2014/01/30 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
平安工地汇报材料
2014/08/19 职场文书
单位授权委托书范本
2014/09/26 职场文书
合作协议书范本
2014/10/25 职场文书