TypeScript基礎入門之三重斜線指令
三斜槓指令是包含單個XML標記的單行註釋。 註釋的內容用作編譯器指令。
三斜槓指令僅在其包含檔案的頂部有效。 三重斜槓指令只能在單行或多行註釋之前,包括其他三重斜槓指令。 如果在宣告或宣告之後遇到它們,則將它們視為常規單行註釋,並且沒有特殊含義。
/// <reference path ="..."/>
/// <reference path ="..."/>
指令是該組中最常見的。 它充當檔案之間的依賴宣告。
三斜槓引用指示編譯器在編譯過程中包含其他檔案。
它們還可以作為在使用–out或–outFile時對輸出進行排序的方法。 在預處理傳遞之後,檔案以與輸入相同的順序傳送到輸出檔案位置。
該過程從一組根檔案開始; 這些是在命令列或tsconfig.json檔案的”files”列表中指定的檔名。 這些根檔案按照指定的順序進行預處理。 在將檔案新增到列表之前,將處理其中的所有三重斜槓引用,幷包括其目標。 三重斜槓引用按照它們在檔案中看到的順序以深度優先方式解析。
如果無根則,則相對於包含檔案解析三斜槓參考路徑。
錯誤
引用不存在的檔案是錯誤的。 如果檔案具有對自身的三斜槓引用,則會出錯。
使用–noResolve
如果指定了編譯器標誌–noResolve,則忽略三次斜槓引用; 它們既不會導致新增新檔案,也不會更改所提供檔案的順序。
/// <reference types="..." />
類似於/// <reference path ="..."/>
指令,該指令用作依賴宣告; 但是,/// <references types ="..."/>
指令聲明瞭對包的依賴性。
解析這些包名稱的過程類似於在import語句中解析模組名稱的過程。 考慮三重斜槓引用型別指令的簡單方法是作為宣告包的匯入。
例如,在宣告檔案中包含/// <references types ="node"/>
宣告此檔案使用在ofollow,noindex" target="_blank">types/node
/index.d.ts中宣告的名稱; 因此,此包需要與宣告檔案一起包含在編譯中。
只有在手動建立d.ts檔案時才使用這些指令。
對於編譯期間生成的宣告檔案,編譯器會自動為您新增/// <references types ="..."/>
; 當且僅當生成的檔案使用引用包中的任何宣告時,才會新增生成的宣告檔案中的/// <reference 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進行編譯。
/// <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
///<amd-module name="NamedModule"/> export class C { }
將導致將名稱NamedModule分配給模組作為呼叫AMD定義的一部分:
amdModule.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"/>
通知編譯器需要在結果模組的require呼叫中注入的非TS模組依賴項。
amd-dependency指令也可以有一個可選的name屬性; 這允許傳遞amd依賴的可選名稱:
/// <amd-dependency path="legacy/moduleA" name="moduleA"/> declare var moduleA:MyType moduleA.callStuff()
生成的JS程式碼:
define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) { moduleA.callStuff() });