2017-07-01 12 views
0

最初のノードパッケージをtypescriptに書きました。それはそれぞれ数百行のコードを持つ6つのモジュールを持っています。テストを成功させるために、各モジュールの先頭に宣言を入れました。それらは必要に応じて(ほかのすべてと一緒に)他のモジュールに含まれます。typescriptモジュールと宣言ファイルの関係を理解する

他のタイプスクリプトモジュールで消耗させる必要があるので、 "index.d.ts"ファイルを作成する必要があります。

それを構造化する最善の方法が、そのファイルに他のものを含めることであるかどうか疑問に思っていますか?例えば、foo.tsbar.tsのモジュールを用意してfoo.d.tsbar.d.tsを作成してからindex.d.tsに含める必要がありますか? (私はそれらを "c"の ".h"ファイルのように思うべきですか?)

また、定義をモジュールに戻す方法は? foo.tsfoo.d.tsからインポートする必要がありますか? bar.tsfooからインポートすると、bar.tsbar.d.tsのマージされたバージョンが得られますか?たとえすべてがindex.d.tsからインポートされたとしても、これはindex.tsからのインポートとどのように区別されますか?

インポートがどのようにモジュールと同じ名前の宣言と相互作用するかの説明は非常に役に立ちます。

+2

あなたがここ7かそこらの質問をしてきました。助けることができる人として、私は、(a)あなたが本当に答えたいと思う単一の質問(b)あなたが考えていることを質問の形で起こす。そうすれば、(a)に関連する回答を提供することが容易になります。 –

答えて

0

@ShaunLuttinが指摘するように、私はここで多くの質問をします。私の質問のタイトルのキーワードは「理解」でした。私は「d.ts」と「ts」ファイルの関係を誤解していましたが、私はそれを明確にしたと思います。

キーステップはtsconfig.jsonファイルに"declarations": trueを追加することでした。これにより、すべてのモジュールの宣言ファイルが自動的に生成され、dist/.jsファイルに入れられました。私のお持ち帰り、化学量論的にそれを置くために:

foo.ts <=> foo.d.ts + foo.js + foo.js.map 

を言い換えれば、私はちょうど私のソースディレクトリで「.d.ts」ファイルへのインターフェイスを移動することを考えによって自分自身を混乱させました。パッケージ内のtypescriptソースは自給自足です。ソース内の他のタイプスクリプトファイル(宣言ファイルではない)にインターフェイスを分解するかどうかは、直交する懸念事項です。

宣言ファイルは、パッケージの境界を越えて移動するjavascriptコードを補完する型コンポーネントとして使用されます。 (理論的には、 "d.ts" + ".js"ファイルから ".ts"ファイルに逆戻りすることすらできるはずです; @ S.Klechkovskiは、ソースマップファイルに関連情報[thanks!]が含まれていることを指摘します。私はまだ3つをまとめるツールはないと思っています)。タイスクリプトファイルは、「自分自身を繰り返さない」という条件を満たすために、「一元的な権限」のままです。

[NBは、私は誰かがより明確な説明を与えることができる場合には数日間、未承認の私の答えを残しておきます。]

+1

* .d.tsファイルには、対応する* .tsファイルの型宣言だけが含まれています。宣言ファイルは、タイプチェックのためだけにTypeScriptコンパイラによって使用されます。コンパイラはソースマップ( "soureMap":true)を生成することもできます。ソースマップを使用して、コンパイルされたコードをTypeScriptに戻すことができます。 foo.js + foo.js.map <=> foo。TS –

関連する問題