たとえば、AMDを使って書くことはできますか?ES6以外の形式でTypeScriptモジュールを書くことはできますか?
define([
'hb!./some/file.hb'
], function(template) {
//
})
たとえば、AMDを使って書くことはできますか?ES6以外の形式でTypeScriptモジュールを書くことはできますか?
define([
'hb!./some/file.hb'
], function(template) {
//
})
ある程度は、はい。
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)モジュールローディングシステムが含まれます。生成されたコードの定義、要求、および呼び出しの詳細については、各モジュールローダーのドキュメントを参照してください。
AMDやCommonJSなどのモジュールシステムをターゲットにするには、--moduleフラグを渡します。
実際のTypescriptコードでそれを行うには、requirejsなどに依存してdefine関数をインポートして記述したとおりに使用する必要がありますが、それが良いのかどうかはわかりませんアイディア。私が推測するあなたのユースケースに依存します。
しかし、この場合、TypeScriptは、ES6モジュールと同じように、別のAMDファイルの書き出しから型を推測することはできません。これは、私がやっていないことを望んでいた各AMDモジュールファイルの横に宣言を書く必要があることを意味します。 – trusktr