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 相关文章推荐
MSN消息提示类
Sep 05 Javascript
JS画5角星方法介绍
Sep 17 Javascript
chrome调试javascript详解
Oct 21 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
javascript 单例模式详解及简单实例
Feb 14 Javascript
在vue项目中正确使用iconfont的方法
Sep 28 Javascript
微信小程序实现按字母排列选择城市功能
Nov 25 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
Aug 13 Javascript
详解React中共享组件逻辑的三种方式
Feb 02 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
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
Python的时间模块datetime详解
2017/04/17 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
python如何调用百度识图api
2020/09/29 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
高三毕业典礼主持词
2014/03/27 职场文书
食品安全处置方案
2014/06/14 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
运动会广播稿100字
2015/08/19 职场文书
爱国之歌(8首)
2019/09/29 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
mysql查询结果实现多列拼接查询
2022/04/03 MySQL