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 相关文章推荐
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
Aug 22 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
May 06 Javascript
Node.js API详解之 timer模块用法实例分析
May 07 Javascript
nuxt引入组件和公共样式的操作
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中二维数组排序问题方法详解
2015/08/28 PHP
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Python抓取京东图书评论数据
2014/08/31 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
解读python如何实现决策树算法
2018/10/11 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python小白学习包管理器pip安装
2020/06/09 Python
Django-imagekit的使用详解
2020/07/06 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
CSS3 分类菜单效果
2019/05/27 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
教师年度考核评语
2014/04/28 职场文书
公司活动总结怎么写
2014/06/25 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
教师自荐信范文
2015/03/06 职场文书
考勤制度通知
2015/04/25 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
netty 实现tomcat的示例代码
2022/06/05 Servers