2016-11-28 6 views
3

私はいくつかのタイプコピーファイルは.d.tsと他のものは単一の.tsエクステンションを持っています。TypeScript:* .tsと* d.ts拡張子

彼らは何を表していますか? 違いは何ですか?

答えて

9

これらはdeclaration filesであるか、ウェブでdefinition filesと呼ばれることもあります。

これらのファイルが必要な理由を示す例を使用して回答します。

f機能を持つlib.jsライブラリがあるとします。

"use strict"; 
function f() { 
} 
exports.f = f; 

このライブラリは、他のjsファイルで正常に機能します。例えば。

var f = require('./lib').f; 
f(); 

しかし、あなたは活字体で開発している、とあなたindex.ts次の書き込みであなたは、この機能を使用する必要があります:main.jsから使用して

import {f} from './lib'; 

しかしtypescriptですコンパイラはあなたを与えるだろうエラー:typescriptですがjsファイルを読み取ることができないため

Error:(1, 17) TS2307:Cannot find module './lib'. 

です。だから、あなたのモジュールと関数についてタイプコピー・コンパイラに伝える必要があります。確かに、あなたはtypescriptでlib全体を書き換えたくありません。しかし、解決策の宣言ファイルがあります。今ではすべて正常にコンパイルされます

export declare function f(): void; 

:あなたはlib.d.tsファイルに次のように置くことによってlib.jsのための宣言ファイルを作成することにより、index.tsに機能fを使用することができます。 TypeScriptで書いている場合は、"declaration": true,tsconfig.jsonファイルに、-dtscに指定して、これらのファイルを自動的に生成することができます。

場合は

のでd.tsファイルではなく、元の.tsファイルのtypescriptですコンパイル時間の間に彼らのJavaScript対応(ファイル)と一緒に使用されているそれらを必要とする:あなたはあなたのlibが書かれたい

  • JavaScriptで、あなたにはJavaScript で書かれたLIBを消費したい活字体
  • で 書き込み
  • 他の人によって消費されます活字プロジェクト

は時々、両方tsd.tsファイルが用意されていますが、開発者はd.tsファイルを公開するchosesが。これはnpmリポジトリのチームがangular2チームが選択したアプローチです。

+0

これまでのところ、私がタイプコピーライブラリを開発しているなら、 '.d.ts'ファイルを作成する必要はありません。 – Jordi

+1

あなたのライブラリを消費するために、typescriptでなく** javascript **を書いている他の人には、 'd.ts'ファイルを提供する必要があります。しかし私が私の答えで言及したように、あなたはそれらを書く必要はありません、typescriptコンパイラによって自動的に生成されます。 –

+0

「あなたはJavaScriptで書かれたあなたのライブラリをTypeScriptで書かれた人が消費するようにしたい」と反対です。「typescriptではなくjavascriptで書いている人があなたのライブラリを消費したい場合は、 d.tsファイルを提供する "。宣言ファイルは、Typescript開発者がサードパーティのJSファイルを使用するのに役立つものではありません。主にインテリセンスの形で、そしてあなたが提供した優れた例でも? –

2

.tsは、TypeScriptコードファイルです。 .d.tsdeclaration fileで、通常、非TypeScript API(DOMやjQueryなど)のタイプを定義するために使用されます。

1

.d.tsファイルは、一般に型定義ファイルを示すものです。一般的には、JavaScriptの中にtypescriptのソースがないライブラリが存在します。 .tsファイルはあなたのタイスクリプトファイルになります

1

d.tsファイルには、さまざまな既存のJavaScriptライブラリの関数、小道具などの定義のみが含まれています。 (正確にタイプされたスクリプトの略)

.tsファイルは、あなたが開発したファイルであり、jsファイルに変換されます。 (Typed Scriptの略)

1

.d.tsファイルには、コンパイル時にjavascriptを生成するコードを入れることはできません。それは(通常は外部のjavascripライブラリの)定義のみです。例えば、.d.tsファイルに "declare"修飾子を付けずに "namespace"を定義するのは誤りです。

関連する問題