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实现图片产生波纹一样flash效果的方法
Feb 27 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
Jan 10 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
js简单设置与使用cookie的方法
Jan 22 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
node.js使用express框架进行文件上传详解
Mar 03 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 Javascript
基于JS实现table导出Excel并保留样式
May 19 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
介绍一下write命令
2012/09/24 面试题
职员竞岗演讲稿
2014/05/14 职场文书
风之谷观后感
2015/06/11 职场文书
开学典礼观后感
2015/06/15 职场文书
小学运动会宣传稿
2015/07/23 职场文书
简历自我评价范文
2019/04/24 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android