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新的事件绑定机制on()的使用技巧
Apr 26 Javascript
jquery中通过父级查找进行定位示例
Jun 28 Javascript
JS、CSS加载中的小问题探讨
Nov 26 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
使用时间戳解决ie缓存的问题
Aug 20 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
浅析jquery与checkbox的checked属性的问题
Apr 27 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
Jun 13 Javascript
JavaScript函数重载操作实例浅析
May 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
?繁体转换的class
2006/10/09 PHP
php调用C代码的实现方法
2014/03/11 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
对python中return和print的一些理解
2017/08/18 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
python 异或加密字符串的实例
2018/10/14 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
详解Python做一个名片管理系统
2019/03/14 Python
python dlib人脸识别代码实例
2019/04/04 Python
python3安装crypto出错及解决方法
2019/07/30 Python
通过实例解析Python return运行原理
2020/03/04 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
领导调研接待方案
2014/02/27 职场文书
给学校的建议书范文
2014/05/15 职场文书
关于运动会的广播稿
2014/09/22 职场文书
社会工作专业自荐信
2014/09/26 职场文书
论语读书笔记
2015/06/26 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
Java异常处理try catch的基本用法
2021/12/06 Java/Android
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL