2016-06-17 11 views
3

TypeScript初心者質問です。私たちのプロジェクトでは、* .d.tsファイルを追加する必要のある外部JavaScriptライブラリを使用しています。私はこのユースケースとこれを行う必要があった理由を理解しています。TypeScriptインターフェイスを* .d.tsファイルに定義する必要があります

私たちが定義している私たち自身のインターフェースについては、私の開発者の一人は、* .d.tsファイルでそれらを定義することを提案しました。そのため、必要なモジュールにインポートすることなくインターフェイスタイプにアクセスできるようになりました。これを使って。

例えば、我々は多くの分野でそれを再利用することができるように、「エラー最初のコールバック」機能のためのインタフェースを作成したいです。私たちは、このようなエラー最初のコールバック用のインターフェイスを定義することができ

export function helloWorldEventually(callback: (err: Error, result: any) => void) { 
    callback(null, 'Hello World'); 
} 

ので、代わりにこの

... ...

export interface ErrorFirstCallback { 
    (err: Error, result: any): void; 
} 

そして、このようにそれを使用して...

export function helloWorldEventually(callback: ErrorFirstCallback) { 
    callback(null, 'Hello World'); 
} 

最初は、ErrorFirstCallback.tsでErrorFirstCallbackインターフェイスを定義し、参照するためにインポートしました それ。

別の開発者たちは* .d.tsファイルに入れ、その後、我々はそれを参照するために、それをインポートする必要はありません示唆しました。

我々が定義されているインタフェースは、* .TSファイルVS * .d.tsファイルで定義する必要があります。

ありがとうございます!

+0

。 '* .d.ts'-filesは主に' * .js'ファイル/ libに型を付けるために使われます。私はこのような定義ファイルを使用することに同意するかどうか分からないし、これをメインのtsファイルで参照される 'interfaces.ts'に入れておきます。または、冗長/安全にしておき、それを必要とするすべてのファイルでinterface-fileを参照してください。 – Thomas

+0

この記事を見てください:http://ivanz.com/2016/06/07/how-does-typescript-discover-type-declarations-definitions-javascript/ –

答えて

2

宣言ファイルは、外部JavaScriptライブラリの形状を記述します。たとえば、$でjQueryを使用すると、$またはJQueryが定義されていないため、宣言ファイルのないTypeScriptエラーが発生します。そのため、宣言ファイルはインタフェースを作成するので、コンパイラは「この変数の型がJQueryの場合はx、y、zの関数を持たなければならない」と認識します。

プロジェクトのインタフェースを作成するときは、 :1つの大きなインタフェースファイル内、各インタフェースの個々のファイル内、またはファイルが属している可能性のあるファイル内では、宣言ファイル内では非常に不便です。

個人的に私は、各モジュール/クラス/インタフェースのための個々のファイルを持っているのが好き。しかし、その味の問題。

宣言ファイルを作成考慮唯一のものは、他の開発者が自分のプロジェクトに(活字体ではない!)あなたは、最終的なJavaScriptファイルを使用する可能性を与えることです。

+0

私はこの一般的なルールに従います:もし私がインターフェイスを作成しているときは通常の* .tsファイルにする必要がありますが、外部JSモジュールのインターフェイスや型を追加する必要がある場合は、宣言ファイルを使用するのが理にかなっています。答えをありがとう! – Kevin

+0

あなたはもっと多くのことをインターフェイスで扱えば分かるでしょう。 Btw。ほとんどのLibaries [GitHub](https://github.com/DefinitelyTyped/DefinitelyTyped)の定義ファイルが見つかります。 – Mick

0

あなたがtypingsを使用していますか?それは第三者タイプを管理するコミュニティのようです。そうすれば、他の開発者のAPIの定義を管理する必要はありません。私の知る限りで基準点として

ノード環境d.tsちょうどAPIを通じて(err, res)コールバックを定義するために表示されます(https://github.com/typed-typings/env-node/blob/master/6/node.d.ts

関連する問題