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 相关文章推荐
js Form.elements[i]的使用实例
Nov 13 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 Javascript
angular框架实现全选与单选chekbox的自定义
Jul 06 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
深入理解 JS 垃圾回收
Jun 03 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 Javascript
JavaScript 中的六种循环方法
Jan 06 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
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
php文档更新介绍
2011/07/22 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
用JavaScript实现动画效果的方法
2013/07/20 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python中eval与int的区别浅析
2019/08/11 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
怎样让char类型的东西转换成int类型
2013/12/09 面试题
初中校园广播稿
2014/02/02 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
写字楼租赁意向书
2014/07/30 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Python max函数中key的用法及原理解析
2021/06/26 Python