三斜線指令是包含單一 XML 標籤的單行註解。註解的內容用作編譯器指令。
三斜線指令僅在包含檔案的頂端有效。三斜線指令之前只能有單行或多行註解,包括其他三斜線指令。如果在陳述式或宣告之後遇到三斜線指令,則將其視為一般單行註解,且不具備特殊意義。
/// <reference path="..." />
/// <reference path="..." />
指令是此組中最常見的指令。它用於宣告檔案之間的相依性。
三斜線參考會指示編譯器在編譯過程中包含其他檔案。
它們也可用於在使用 out
或 outFile
時排序輸出。在預處理後,檔案會以輸入後的相同順序發射到輸出檔案位置。
預處理輸入檔案
編譯器會對輸入檔案執行預處理,以解析所有三斜線參考指令。在此過程中,會將其他檔案新增到編譯中。
處理程序從一組根檔案開始;這些是命令列或 tsconfig.json
檔案中的 files
清單中指定的檔案名稱。這些根檔案會以指定的順序預處理。在將檔案新增到清單之前,會處理其中的所有三斜線參考,並包含其目標。三斜線參考會以深度優先的方式解析,順序為在檔案中看到的順序。
如果使用相對路徑,三斜線參考路徑會相對於包含的檔案解析。
錯誤
參照不存在的檔案是錯誤的。檔案對自己的三斜線參考是錯誤的。
使用 --noResolve
如果指定了編譯器標記 noResolve
,則會忽略三斜線參考;它們既不會導致新增檔案,也不會變更所提供檔案的順序。
/// <reference types="..." />
類似於作為相依性宣告的 /// <reference path="..." />
指令,/// <reference types="..." />
指令宣告對套件的相依性。
解析這些套件名稱的程序類似於在 import
陳述式中解析模組名稱的程序。思考三斜線參考類型指令的簡單方式是將其視為宣告套件的 import
。
例如,在宣告檔案中包含 /// <reference types="node" />
宣告此檔案使用在 @types/node/index.d.ts
中宣告的名稱;因此,此套件需要與宣告檔案一起包含在編譯中。
僅在手動撰寫 d.ts
檔案時使用這些指令。
對於在編譯期間產生的宣告檔案,編譯器會自動為您新增 /// <reference types="..." />
;當且僅當產生的檔案使用來自所參考套件的任何宣告時,才會在產生的宣告檔案中新增 /// <reference types="..." />
。
若要在 .ts
檔案中宣告對 @types
套件的相依性,請改用命令列或 tsconfig.json
中的 types
。請參閱 在 tsconfig.json
檔案中使用 @types
、typeRoots
和 types
以取得更多詳細資料。
/// <reference lib="..." />
此指令允許檔案明確包含現有的內建 lib 檔案。
內建 lib 檔案的參照方式與 tsconfig.json 中的 lib
編譯器選項相同(例如,使用 lib="es2015"
,而非 lib="lib.es2015.d.ts"
等)。
對於依賴內建類型(例如 DOM API 或內建 JS 執行時期建構函式,如 Symbol
或 Iterable
)的宣告檔案作者,建議使用三斜線參照 lib 指令。以前,這些 .d.ts 檔案必須新增此類型的轉發/重複宣告。
例如,在編譯中的其中一個檔案中新增 /// <reference lib="es2017.string" />
等同於使用 --lib es2017.string
編譯。
ts
/// <reference lib="es2017.string" />"foo".padStart(4);
/// <reference no-default-lib="true"/>
此指令將檔案標示為預設函式庫。您會在 lib.d.ts
及其不同變體的頂端看到此註解。
此指令指示編譯器不要在編譯中包含預設函式庫(即 lib.d.ts
)。其影響類似於在命令列中傳遞 noLib
。
另請注意,傳遞 skipDefaultLibCheck
時,編譯器只會略過檢查具有 /// <reference no-default-lib="true"/>
的檔案。
/// <amd-module />
預設情況下,AMD 模組會以匿名方式產生。這可能會在其他工具用於處理產生的模組時造成問題,例如綑綁器(例如 r.js
)。
amd-module
指令允許將一個選用的模組名稱傳遞給編譯器
amdModule.ts
ts
/// <amd-module name="NamedModule"/>export class C {}
將導致將名稱 NamedModule
指派給模組,作為呼叫 AMD define
的一部分
amdModule.js
js
define("NamedModule", ["require", "exports"], function (require, exports) {var C = (function () {function C() {}return C;})();exports.C = C;});
/// <amd-dependency />
注意:此指令已被棄用。請改用
import "moduleName";
陳述式。
/// <amd-dependency path="x" />
會告知編譯器關於非 TS 模組相依性,需要注入在產生的模組的 require 呼叫中。
amd-dependency
指令也可以有一個選用的 name
屬性;這允許傳遞 amd-dependency 的選用名稱
ts
/// <amd-dependency path="legacy/moduleA" name="moduleA"/>declare var moduleA: MyType;moduleA.callStuff();
產生的 JS 程式碼
js
define(["require", "exports", "legacy/moduleA"], function (require,exports,moduleA) {moduleA.callStuff();});