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加ASP二级域名转向的代码
May 17 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
May 07 Javascript
jquery滚动条插件jScrollPane的使用介绍
Nov 08 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
javascript几个易错点记录
Nov 26 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
基于javascript实现表格的简单操作
May 21 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
Jan 20 Javascript
vue做网页开场视频的实例代码
Oct 20 Javascript
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
jQuery无冲突模式详解
Jan 17 jQuery
如何编写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
解析thinkphp中的导入文件标签
2013/06/20 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
python文件操作整理汇总
2014/10/21 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
python字符串循环左移
2019/03/08 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
pandas 空数据处理方法详解
2019/11/02 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
您的网上新华书店:文轩网
2016/08/24 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
大学国际贸易专业自荐信
2014/06/05 职场文书
公司周年庆活动方案
2014/08/25 职场文书
让子弹飞观后感
2015/06/11 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android