web-dev-qa-db-ja.com

タイプスクリプトの* .d.tsと* .tsの違いは何ですか?

私は本当に素晴らしいと感じたTypeScriptで遊んでいます。しかし、*.d.ts*.tsの違いについて混乱しています。それらの違いは何ですか?誰かが適切な例で私を説明できますか?

40
Nur Rony

TypeScript定義ファイル(*.d.ts

これらのファイルは、TypeScriptで使用するJavaScriptファイルの「形状」を記述するために使用されます。

たとえば、次のJavaScript(Example.js)があるとします。

function displayMessage(message) {
    alert(message);
}

このファイルだけでは、TypeScriptコードにはこの関数が存在するという手がかりがありません。名前もパラメーターもわかりません。これを修正するには、定義ファイル(Example.d.ts)に記述します:

declare function displayMessage(message: string);

TypeScriptで関数displayMessageをコンパイルエラーなしで使用できるようになり、誤って使用するとコンパイルエラーが発生します(たとえば、2 Iではなく1引数を指定した場合エラーが発生します)。

要するに:定義ファイルを使用すると、TypeScriptのコードを書き直すことなく、TypeScriptの既存のJavaScriptコードを使用できます。

TypeScriptファイル(.ts

これは、TypeScriptを記述するときに使用する標準のファイル拡張子です。 JavaScriptにコンパイルされます。

46
David Sherret

* .d.tsファイルで許可されるものは、*。tsファイルにも表示されますが、その逆は表示されません。したがって、*。d.tsでは、TypeScriptの機能のサブセットを使用できます。

* .d.tsファイルには、出力にJavaScriptコードを生成しないTypeScriptコードのみを含めることができます。 JavaScriptを生成するTypeScriptの機能を使用しようとすると、エラーが発生します。

インターフェイスはコンパイル後に完全に消えるため、許可されます。

出力JavaScriptでオブジェクトを生成する通常の列挙型とは異なり、Const列挙型(1.4で追加)も使用できます。

トップレベルのクラス、変数、モジュール、および関数には、declareをプレフィックスとして付ける必要があります。多くの場合、最上位のdeclare moduleおよびその中のものも純粋な宣言です。

declare module Something {
    var x;
}

これらは、TypeScriptインターフェースをJavaScriptで記述されたコードに公開するだけでなく、もっと便利です。また、これらを使用して、コードで広く使用されている一連の共通インターフェースを宣言することもできます。そのため、特定の物理モジュールをrequireする必要はありません。

22