TypeScript 三斜線指令

2022-04-21 09:27 更新

三斜線指令是包含單個(gè)XML標(biāo)簽的單行注釋。 注釋的內(nèi)容會做為編譯器指令使用。

三斜線指令可放在包含它的文件的最頂端。 一個(gè)三斜線指令的前面只能出現(xiàn)單行或多行注釋,這包括其它的三斜線指令。 如果它們出現(xiàn)在一個(gè)語句或聲明之后,那么它們會被當(dāng)做普通的單行注釋,并且不具有特殊的涵義。

/// <reference path="..." />

/// <reference path="..." />指令是三斜線指令中最常見的一種。 它用于聲明文件間的 依賴。

三斜線引用告訴編譯器在編譯過程中要引入的額外的文件。

當(dāng)使用--out--outFile時(shí),它也可以做為調(diào)整輸出內(nèi)容順序的一種方法。 文件在輸出文件內(nèi)容中的位置與經(jīng)過預(yù)處理后的輸入順序一致。

預(yù)處理輸入文件

編譯器會對輸入文件進(jìn)行預(yù)處理來解析所有三斜線引用指令。 在這個(gè)過程中,額外的文件會加到編譯過程中。

這個(gè)過程會以一些根文件開始; 它們是在命令行中指定的文件或是在 tsconfig.json中的"files"列表里的文件。 這些根文件按指定的順序進(jìn)行預(yù)處理。 在一個(gè)文件被加入列表前,它包含的所有三斜線引用都要被處理,還有它們包含的目標(biāo)。 三斜線引用以它們在文件里出現(xiàn)的順序,使用深度優(yōu)先的方式解析。

一個(gè)三斜線引用路徑是相對于包含它的文件的,如果不是根文件。

錯(cuò)誤

引用不存在的文件會報(bào)錯(cuò)。 一個(gè)文件用三斜線指令引用自己會報(bào)錯(cuò)。

使用 --noResolve

如果指定了--noResolve編譯選項(xiàng),三斜線引用會被忽略;它們不會增加新文件,也不會改變給定文件的順序。

/// <reference no-default-lib="true"/>

這個(gè)指令把一個(gè)文件標(biāo)記成默認(rèn)庫。 你會在 lib.d.ts文件和它不同的變體的頂端看到這個(gè)注釋。

這個(gè)指令告訴編譯器在編譯過程中不要包含這個(gè)默認(rèn)庫(比如,lib.d.ts)。 這與在命令行上使用 --noLib相似。

還要注意,當(dāng)傳遞了--skipDefaultLibCheck時(shí),編譯器只會忽略檢查帶有/// <reference no-default-lib="true"/>的文件。

/// <amd-module />

默認(rèn)情況下生成的AMD模塊都是匿名的。 但是,當(dāng)一些工具需要處理生成的模塊時(shí)會產(chǎn)生問題,比如 r.js

amd-module指令允許給編譯器傳入一個(gè)可選的模塊名:

amdModule.ts
///<amd-module name='NamedModule'/>
export class C {
}

這會將NamedModule傳入到AMD define函數(shù)里:

amdModule.js
define("NamedModule", ["require", "exports"], function (require, exports) {
    var C = (function () {
        function C() {
        }
        return C;
    })();
    exports.C = C;
});

/// <amd-dependency />

注意:這個(gè)指令被廢棄了。使用import "moduleName";語句代替。

/// <amd-dependency path="x" />告訴編譯器有一個(gè)非TypeScript模塊依賴需要被注入,做為目標(biāo)模塊require調(diào)用的一部分。

amd-dependency指令也可以帶一個(gè)可選的name屬性;它允許我們?yōu)閍md-dependency傳入一個(gè)可選名字:

/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA:MyType
moduleA.callStuff()

生成的JavaScript代碼:

define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) {
    moduleA.callStuff()
});


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號