乐趣区

关于typescript:TypeScript-里的-Reference-Type-和-TripleSlash-Directives

SAP Spartacus 是一个 TypeScript 利用,在有些文件结尾,发现了这样的定义:

// '@sapui5/ts-types-esm' package contains types for sap modules, e.g. 'sap/ui/core/Core'
/// <reference types="@sapui5/ts-types-esm" />

对第 31 行的代码按住 Ctrl 再单击鼠标左键:

间接跳转到了 sap.ui.core.d.ts 文件外部:

/// 的正式名称叫 Triple-Slash Directives.

三斜杠指令是蕴含单个 XML 标记的单行正文。正文的内容用作编译器指令。

三斜杠指令仅在其蕴含文件的顶部无效。三斜杠指令前只能有单行或多行正文,包含其余三斜杠指令。如果在语句或申明之后遇到它们,它们将被视为惯例的单行正文,并且没有非凡含意。

/// <reference types=”…” /> 指令申明对包的依赖。

解析这些包名的过程相似于在 import 语句中解析模块名的过程。将三斜杠援用类型指令视为申明包的导入的一种简略办法。

例如,在申明文件中蕴含 /// <reference types=”node” /> 申明该文件应用在 @types/node/index.d.ts 中申明的名称;因而,这个包须要与申明文件一起蕴含在编译中。

仅当手动创作 d.ts 文件时才应用这些指令。

对于编译时产生的申明文件,编译器会主动增加 /// <reference types=”…” />;当且仅当生成的文件应用来自援用包的任何申明时,才会在生成的申明文件中增加 /// <reference types=”…” />。

要在 .ts 文件中申明对 @types 包的依赖,请在命令行或 tsconfig.json 中应用类型。

从这三个 Observable 的 pipe 内的 Operator 能看出这些操作之间的逻辑程序。

这个 ui5bootstrapped 返回的 Observable,什么时候被 subscribe 呢?

为什么触发点是 loadVisualization 的 subscribe 调用呢?loadVisualization 和 bootstrapUi5 的关联在哪里?

答案:loadVisualization 返回的是 this.viewportAdded$, 而 this.viewportAdded$ui5Initialized$ mergedMap 之后的产物,ui5Initialized$ 又是 ui5BootStrapped$ 的产物,因而 this.viewportAdded$ 被 subscribe,肯定是 ui5BootStrapped$ 的 subscribe 逻辑最先被执行,而后是 ui5Initialized$,最初才是 this.viewportAdded$.

运行时调试:ui5BootStrapped$ 最先被调用:

而后是 initializeUI5:

最初是 addViewport:

退出移动版