08-ts-三斜線指令

這是我參與更文挑戰的第9天,活動詳情查看: 更文挑戰node


三斜線指令 是包含單個XML標籤的單行註釋。 註釋的內容會作爲編譯器指令使用。

三斜線指令僅可放在包含它的文件的最頂端。 一個三斜線指令的前面只能出現單行或多行註釋,這包括其它的三斜線指令。web

若是三斜線指令出如今一個語句或聲明以後,那麼它們會被當作普通的單行註釋,而且不具備特殊的涵義。json

/// <reference path="..." />
/// <reference path="..." />指令是三斜線指令中最多見的一種。 它用於聲明文件間的 依賴。
複製代碼

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

預處理輸入文件

編譯器會對輸入文件進行預處理來解析全部三斜線引用指令。 在這個過程當中,額外的文件會加到編譯過程當中。函數

這個過程會以一些根文件開始; 它們是在命令行中指定的文件或是在 tsconfig.json中的"files"列表裏的文件。 這些根文件按指定的順序進行預處理。 在一個文件被加入列表前,它包含的全部三斜線引用都要被處理,還有它們包含的目標。 三斜線引用以它們在文件裏出現的順序,使用深度優先的方式解析。工具

一個三斜線引用路徑是相對於包含它的文件的,若是不是根文件。post

錯誤 引用不存在的文件會報錯。 一個文件用三斜線指令引用本身會報錯。ui

使用 --noResolve 若是指定了--noResolve編譯選項,三斜線引用會被忽略;它們不會增長新文件,也不會改變給定文件的順序。url

/// <reference types="..." />/// <reference path="..." />指令類似,這個指令是用來聲明 依賴的;
一個 /// <reference types="..." />指令則聲明瞭對某個包的依賴。
複製代碼

對這些包的名字的解析與在 import語句裏對模塊名的解析相似。 能夠簡單地把三斜線類型引用指令當作 import聲明的包。spa

例如,把 /// 引入到聲明文件,代表這個文件使用了 @types/node/index.d.ts裏面聲明的名字; 而且,這個包須要在編譯階段與聲明文件一塊兒被包含進來。

僅當在你須要寫一個d.ts文件時才使用這個指令。

對於那些在編譯階段生成的聲明文件,編譯器會自動地添加/// ; 當且僅當結果文件中使用了引用的包裏的聲明時纔會在生成的聲明文件裏添加/// 語句。

若要在.ts文件裏聲明一個對@types包的依賴,使用--types命令行選項或在tsconfig.json裏指定。 查看 在tsconfig.json裏使用@types,typeRoots和types瞭解詳情。

/// 這個指令把一個文件標記成默認庫。 你會在 lib.d.ts文件和它不一樣的變體的頂端看到這個註釋。

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

還要注意,當傳遞了--skipDefaultLibCheck時,編譯器只會忽略檢查帶有/// 的文件。

/// 默認狀況下生成的AMD模塊都是匿名的。 可是,當一些工具須要處理生成的模塊時會產生問題,好比 r.js。

amd-module指令容許給編譯器傳入一個可選的模塊名:

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

這會將NamedModule傳入到AMD define函數裏:

amdModule.js
define("NamedModule", ["require", "exports"], function (require, exports) {
    var C = (function () {
        function C() {
        }
        return C;
    })();
    exports.C = C;
});
/// <amd-dependency />
複製代碼

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

/// 告訴編譯器有一個非TypeScript模塊依賴須要被注入,作爲目標模塊require調用的一部分。

amd-dependency指令也能夠帶一個可選的name屬性;它容許咱們爲amd-dependency傳入一個可選名字:

/// declare var moduleA:MyType moduleA.callStuff() 生成的JavaScript代碼:

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

相關文章
相關標籤/搜索