2017-02-02 10 views

答えて

1

ある程度は、はい。

TypeScriptはJavaScriptのスーパーセットなので、有効なJavaScriptも有効なTypeScriptです。あなたの例では

は、コンパイラはおよそdefine文句を言うだろう:

エラーTS2304: 'を定義する' 名前を見つけることができません。これは、コンパイラがdefineが存在することをお知らせしますが、それは任意の追加情報をコンパイラに提供されていません

declare var define; 

define([ 
    'hb!./some/file.hb' 
], function(template) { 
    // 
}) 

:あなたはそれを使用する前defineが存在しているコンパイラに指示する必要があり

それについて。したがって、別の解決策は、適切なtype definitionを追加することです。

amdモジュールを使用するには、amdモジュールローダーを追加する必要があります。これはTypeScriptに組み込まれているものではありません。 TypeScriptは、JavaScriptのスーパーセットです。

TypeScriptを使用すると、コンパイラのタイプチェックが可能になり、古いJavaScriptバージョンにコンパイルする際に、新しいJavaScript機能を使用できるようになります。しかし、TypeScriptは、別のモジュールがどのモジュールをエクスポートするかを理解することができません。したがって、モジュールがエクスポートするものを記述する各AMDモジュールの宣言が必要になります。

もう1つの答えとして、ES6構文を使用してモジュールを記述し、amd形式にコンパイルすることもできます。 TypeScriptLang.orgのドキュメントから:

コンパイル時に指定したモジュールの対象によっては、コンパイラは、Node.jsの(CommonJS)のための適切なコードを生成します、require.js(AMD)、同型(UMD)、SystemJS 、またはECMAScript 2015ネイティブモジュール(ES6)モジュールローディングシステムが含まれます。生成されたコードの定義、要求、および呼び出しの詳細については、各モジュールローダーのドキュメントを参照してください。

+0

しかし、この場合、TypeScriptは、ES6モジュールと同じように、別のAMDファイルの書き出しから型を推測することはできません。これは、私がやっていないことを望んでいた各AMDモジュールファイルの横に宣言を書く必要があることを意味します。 – trusktr

0

AMDやCommonJSなどのモジュールシステムをターゲットにするには、--moduleフラグを渡します。

実際のTypescriptコードでそれを行うには、requirejsなどに依存してdefine関数をインポートして記述したとおりに使用する必要がありますが、それが良いのかどうかはわかりませんアイディア。私が推測するあなたのユースケースに依存します。

関連する問題