5

Backbone.d.tsを使用してBackboneアプリケーションを作成している人がいます。私が議論したい2つのユースケースがあります。

  1. AMDローダー(または私が思うCommonJS)を使用してモジュールでバックボーンアプリケーションを作成する
  2. プレーンJSを使用したバックボーンアプリケーションの作成

define()キャンプ1のユーザーの場合、モジュールをインポートしてラッパーに含めることができるように、バックボーンモジュールを外部として定義する必要があります。

importキャンプ2のユーザーの場合、インテリセンスを使用し、ステートメント/define()ラッパーを使用する必要がないように、バックボーンモジュールを内部モジュールとして定義する必要があります。

質問:両方の場合に使用できるようにモジュールを定義する他の方法はありますか?


フォークを作成する必要はありません。

// required for those using import (1)
declare module "Backbone" { 

また

// required for those not using import (2) and backbone already exists in the global scope
declare module Backbone {

それでも、コード/インテリセンスとうまくやっていくことができます。

4

2 に答える 2

2

私はTypeScriptチームでこれを提起し、彼らは作業項目を開きました。

私は、すべてのモジュールを...を使用して作成することを提案しました。

module MyModule {
}

...ラッパー、モジュールフラグをコンパイラに送信する場合、ファイル名と一致する場合はモジュール宣言を削除する必要があります。そうすれば、変更なしでWeb、CommonJS、またはAMDで動作するようにコンパイルできる1つのモジュールを作成できます。

元の議論はここにあり、それは作業項目に移されました:

http://typescript.codeplex.com/discussions/401397

于 2012-11-20T19:39:29.967 に答える
2

.d.tsコンパイラは、生成するコードの種類を知るために、バックボーンに使用しているモジュールシステムの種類を知る必要があるため、これを1つのファイルだけで行うことはできません。1つのファイル内で内部モジュールと外部モジュールを混在させて一致させることができ、特にバックボーンにどちらを使用していたかを正しく推測する方法はありません。

interface宣言を使用して、大部分のものを正確に1つの場所で宣言し、その共通を参照する「backbone-internal.d.ts」ファイルと「backbone-external.d.ts」ファイルを作成できる場合があります。宣言ファイルですが、それを実行できる範囲は、APIの表面積がどのようになっているかによって異なります。

TL; DR:キャンプ1とキャンプ2は、同じファイル内であっても、相互に排他的ではありません。

于 2012-11-29T01:36:21.700 に答える