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

TypeScript 中高级应用与美满实践

发布时间:2019-08-02 12:00:43 所属栏目:移动互联 来源:AlloyTeam
导读:当我们接头 TypeScript 时,我们在接头什么? TypeScript 的定位 JavaScript 的超集 编译期举动 不引入特殊开销 不改变运行时举动 始终与 ESMAScript 说话尺度同等 (stage 3 语法) TypeScript 中的 Decorator 较为非凡,为 Angular 团队和 TypeScript 团队

与 interface 对比,type 的特点如下:

  • 表杀青果更强盛,不范围于 object/class/function
  • 要扩展已有 type 必要建设新 type,不行以重名
  • 支持更伟大的范例操纵
  1. type Tuple = [number, string]; 
  2. const a: Tuple = [2, 'sir']; 
  3. type Size = 'small' | 'default' | 'big' | number; 
  4. const b: Size = 24; 

根基上全部用 interface 表达的范例都有其等价的 type 表达。但我在实践的进程中,也发明白一种范例只能用 interface 表达,无法用 type 表达,那就是往函数上挂载属性。

  1. interface FuncWithAttachment { 
  2.     (param: string): boolean; 
  3.     someProperty: number; 
  4.   
  5. const testFunc: FuncWithAttachment = ...; 
  6. const result = testFunc('mike');    // 有范例提示 
  7. testFunc.someProperty = 3;    // 有范例提示 

extends 要害字

extends 本意为 “拓展”,也有人称其为 “担任”。在 TypeScript 中,extends 既可看成一个动词来扩展已有范例;也可看成一个形容词来对范例举办前提限制(譬喻用在泛型中)。在扩展已有范例时,不行以举办范例斗嘴的包围操纵。譬喻,基范例中键 a 为 string,在扩展出的范例中无法将其改为 number。

  1. type A = { 
  2.     a: number 
  3.   
  4. interface AB extends A { 
  5.     b: string 
  6. // 与上一种等价 
  7. type TAB = A & { 
  8.     b: string 

泛型

在前文我们已经看到范例现实上可以举办必然的运算,要想写出的范例合用范畴更广,不妨让它像函数一样可以接管参数。TS 的泛型即是起到这样的浸染,你可以把它看成范例的参数。它和函数参数一样,可以有默认值。除此之外,还可以用 extends 对参数自己必要满意的前提举办限定。

在界说一个函数、type、interface、class 时,在名称后头加上<> 暗示即接管范例参数。而在现实挪用时,不必然必要手动传入范例参数,TS 每每能自行揣度出来。在 TS 揣度禁绝时,再手动传入参数来更正。

  1. // 界说 
  2. class React.Component<P = {}, S = {}, SS = any> { ... } 
  3. interface IShowConfig<P extends IShowProps> { ... } 
  4. // 挪用 
  5. class Modal extends React.Component<IModalProps, IModalState> { ... } 

前提范例

除了与、或等根基逻辑,TS 的范例也支持前提运算,其语法与三目运算符沟通,为 T extends U ? X : Y 。这里先举一个简朴的例子。在后文中我们会看到许多伟大范例的实现都必要借助前提范例。

  1. type IsEqualType<A, B> = A extends B ? (B extends A ? true : false) : false; 
  2. type NumberEqualsToString = IsEqualType<number, string>;   // false 
  3. type NumberEqualsToNumber = IsEqualType<number, number>;    // true 

情形 Ambient Modules

在现实应用开拓时有一种场景,当前浸染域下可以会见某个变量,但这个变量并不由开拓者节制。譬喻通过 Script 标签直接引入的第三方库 CDN、一些宿主情形的 API 等。这个时辰可以操作 TS 的情形声明成果,来汇报 TS 当前浸染域可以会见这些变量,以得到范例提示。

详细有两种方法,declare 和三斜线指令。

  1. declare const IS_MOBILE = true;    // 编译后此行消散 
  2. const wording = IS_MOBILE ? '移动端' : 'PC端'; 

用三斜线指令可以一次性引入整个范例声明文件。

  1. /// <reference path="../typings/monaco.d.ts" /> 
  2. const range = new monaco.Range(2, 3, 6, 7); 
深入范例体系

根基范例

根基范例,也可以领略为原子范例。包罗 number、boolean、string、null、undefined、function、array、字面量(true,false,1,2,‘a’)等。它们无法再细分。

复合范例

(编辑:湖南网)

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

热点阅读