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 相关文章推荐
菜单效果
Oct 14 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
Mar 23 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
优化Node.js Web应用运行速度的10个技巧
Sep 03 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
Oct 17 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
JS数组的常用10种方法详解
May 08 Javascript
深入了解JS之作用域和闭包
Jun 16 Javascript
vue props 一次传多个值实例
Jul 22 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 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 CLI模式下的多进程应用分析
2013/06/03 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
婚礼证婚人证婚词
2014/01/13 职场文书
应届生找工作求职信
2014/06/24 职场文书
工会趣味活动方案
2014/08/18 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
求职信格式范文
2015/03/19 职场文书
个人自荐书怎么写
2015/03/26 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
python opencv通过按键采集图片源码
2021/05/20 Python
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android