TypeScript入门-接口

作者:老板丶鱼丸粗面 时间:2024-06-07 15:55:26 

大致介绍

在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];

来源:http://www.cnblogs.com/qqandfqr/p/6641186.html

标签:typescript,接口
0
投稿

猜你喜欢

  • Python获取本机所有网卡ip,掩码和广播地址实例代码

    2021-06-26 20:32:17
  • SQL中自己创建函数 分割字符串

    2008-11-20 16:13:00
  • 深入讨论Python函数的参数的默认值所引发的问题的原因

    2022-08-03 00:54:31
  • SQLServer行转列实现思路记录

    2024-01-18 05:42:43
  • python的random模块及加权随机算法的python实现方法

    2023-09-04 13:32:57
  • ASP连接SQL2005数据库连接代码

    2011-03-25 10:44:00
  • Go语言程序查看和诊断工具详解

    2023-06-22 02:40:38
  • 网页版面布局的方法及技巧

    2007-10-29 12:41:00
  • 浅析python3中的os.path.dirname(__file__)的使用

    2021-11-10 04:35:23
  • Python爬取你好李焕英豆瓣短评生成词云的示例代码

    2021-04-06 12:13:21
  • 解决Django cors跨域问题

    2021-07-02 08:42:36
  • JS将指定的某个字符全部转换为其他字符实例代码

    2023-08-28 21:01:01
  • 用Python的urllib库提交WEB表单

    2023-06-11 00:14:52
  • python制作一个桌面便签软件

    2021-02-23 05:20:40
  • Django实战之用户认证(用户登录与注销)

    2023-03-23 16:52:26
  • Centos7系统下Mysql主从同步配置方案

    2024-01-24 11:29:18
  • 利用JavaScript阻止表单提交的两种方法

    2024-04-22 22:34:44
  • Python内建类型str源码学习

    2021-12-24 22:24:33
  • php生成随机密码的三种方法小结

    2023-11-22 04:25:50
  • Sanic框架Cookies操作示例

    2022-12-24 05:29:04
  • asp之家 网络编程 m.aspxhome.com