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闭包的用途详解
Nov 09 Javascript
详细分析JavaScript变量类型
Jul 08 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
详解React 的几种条件渲染以及选择
Oct 23 Javascript
vue的keep-alive中使用EventBus的方法
Apr 23 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 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
咖啡语言
2021/03/03 咖啡文化
PHP exif扩展方法开启详解
2014/07/28 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
学习Python需要哪些工具
2020/09/04 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
办护照工作证明范本
2014/01/14 职场文书
运动会邀请函范文
2014/02/06 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
大学生社会实践评语
2014/04/25 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
六年级作文之自救
2019/12/19 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python