加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

一文学懂TypeScript的范例

发布时间:2019-03-22 03:28:28 所属栏目:建站 来源:疯狂的技术宅
导读:你将学到什么 阅读本文后,你应该可以或许领略以下代码的寄义: interfaceArrayT{ concat(...items:ArrayT[]|T):T[]; reduceU( callback:(state:U,element:T,index:number,array:T[])=U, firstState?:U):U; } 假如你以为这段代码很是隐秘 那么我赞成你的意见。

在JavaScript中,偶然辰变量会是有几种范例之中的一种。要描写这些变量,可以行使 union types。譬喻,在下面的代码中,x 是 null 范例或 number 范例:

  1. let x = null;  
  2. x = 123; 

x 的范例可以描写为 null | number:

  1. let x: null|number = null;  
  2. x = 123; 

范例表达式 s | t 的功效是范例 s 和 t 在集公道论意义上的连系(正如我们之前看到的那样,两个荟萃)。

下面让我们重写函数 stringify123():这次我们不但愿参数 callback 是可选的。应该老是挪用它。假如挪用者不想传入一个函数,则必需显式转达 null。实现如下。

  1. function stringify123(  
  2.   callback: null | ((num: number) => string)) {  
  3.   const num = 123;  
  4.   if (callback) { // (A)  
  5.     return callback(123); // (B)  
  6.   }  
  7.   return String(num);  

请留意,在行 B 举办函数挪用之前,我们必需再次搜查 callback 是否真的是一个函数(行A)。假如没有搜查,TypeScript 将会陈诉错误。

Optional 与 undefined|T

范例为 T 的可选参数和范例为 undefined|T 的参数很是相似。 (其它对付可选属性也是云云。)

首要区别在于你可以省略可选参数:

  1. function f1(x?: number) { }  
  2. f1(); // OK  
  3. f1(undefined); // OK  
  4. f1(123); // OK 

But you can’t omit parameters of type

可是你不能省略 undefined|T 范例的参数:

  1. function f2(x: undefined | number) { }  
  2. f2(); // error  
  3. f2(undefined); // OK  
  4. f2(123); // OK 

值 null 和 undefined 凡是不包括在范例中

在很多编程说话中,null 是全部范例的一部门。譬喻只要 Java 中的参数范例为 String,就可以转达 null 而Java 不会报错。

相反,在TypeScript中,undefined 和 null 由单独的不相交范例处理赏罚。假如你想使它们见效,必必要有一个范例连系,如 undefined|string 和 null|string。

工具

与Arrays相同,工具在 JavaScript 中饰演两个脚色(无意殽杂和/或越发动态):

  •  记录:在开拓时已知的牢靠命量的属性。每个属性可以有差异的范例。
  •  字典:在开拓时名称未知的恣意数目的属性。全部属性键(字符串和/或标记)都具有沟通的范例,属性值也是云云。

我们将在本文章中忽略 object-as-dictionaries。趁便说一句,无论怎样,map 凡是是比字典的更好选择。

通过接口描写 objects-as-records

接口描写 objects-as-records 。譬喻:

  1. interface Point {  
  2.   x: number;  
  3.   y: number;  

TypeScript 范例体系的一大上风在于它的布局上,而不是在定名上。也就是说,接口 Point 可以或许匹配恰当布局的全部工具:

  1. function pointToString(p: Point) {  
  2.   return `(${p.x}, ${p.y})`;  
  3. }  
  4. pointToString({x: 5, y: 7}); // '(5, 7)' 

对比之下,Java 的标称范例体系必要类来实现接口。

可选属性

假如可以省略属性,则在其名称后头加上一个问号:

  1. interface Person {  
  2.   name: string;  
  3.   company?: string;  

要领

接口内还可以包括要领:

  1. interface Point {  
  2.   x: number;  
  3.   y: number;  
  4.   distance(other: Point): number;  

范例变量和泛型范例

行使静态范例,可以有两个级别:

  •  值存在于工具级别。
  •  范例存在于元级别。

同理:

  •  平凡变量界说在工具级别之上。
  •  范例变量存在于元级别之上。它们是值为范例的变量。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读