機能しない理由
import * as MC from './MyClass';
これはES6 / ES2015スタイルのimport
構文です。これの正確な意味は、「読み込まれたモジュール名前空間オブジェクトを取得し./MyClass
、ローカルで使用するMC
」です。特に、「モジュール名前空間オブジェクト」は、プロパティを持つプレーンオブジェクトのみで構成されています。ES6モジュールオブジェクトは、関数として、またはで呼び出すことはできませんnew
。
もう一度言うと、ES6モジュールの名前空間オブジェクトは、関数として、またはで呼び出すことはできませんnew
。
モジュールからimport
使用* as X
するものは、プロパティのみを持つように定義されています。下位レベルのCommonJSでは、これは完全には尊重されない可能性がありますが、TypeScriptは標準で定義されている動作を教えてくれます。
何が機能しますか?
このモジュールを使用するには、CommonJSスタイルのインポート構文を使用する必要があります。
import MC = require('./MyClass');
両方のモジュールを制御する場合は、export default
代わりに使用できます。
MyClass.ts
export default class MyClass {
constructor() {
}
}
MyConsumer.ts
import MC from './MyClass';
私はこれについて悲しいです。ルールはばかげています。
ES6のインポート構文を使用することは良かったのですが、今はこれを実行する必要がありimport MC = require('./MyClass');
ますか?2013年だよ!ラメ!しかし、悲嘆はプログラミングの通常の部分です。キュブラーロスモデルのステージ5に進んでください。
ここのTypeScriptは、これが機能しないため、機能しないことを通知しています。ハックがあり(namespace
宣言を追加することMyClass
は、この動作を装う一般的な方法です)、特定のダウンレベリングモジュールバンドル(ロールアップなど)で動作する可能性がありますが、これは幻想です。ES6モジュールの実装はまだ出回っていませんが、いつまでも真実ではありません。
ES6構文を使用してES6が明示的に実行しないことを実行しようとすることで、neatoネイティブES6モジュール実装で実行しようとし、重大な障害に備えていることを確認して、将来の自分を想像してください。
非標準のモジュールローダーを利用したい
多分あなたはdefault
何も存在しないときにエクスポートを「うまく」作成するモジュールローダーを持っています。つまり、人々は理由のために標準を作成しますが、標準を無視するのは楽しいこともあります。
MyConsumer.tsを次のように変更します。
import A from './a';
allowSyntheticDefaultImports
コマンドラインまたはtsconfig.json
オプションを指定します。
allowSyntheticDefaultImports
コードの実行時の動作はまったく変更されないことに注意してください。default
存在しない場合にモジュールローダーがエクスポートを作成することをTypeScriptに通知するフラグです。以前とは異なり、コードがnodejsで魔法のように機能することはありません。
javascript
として削除してそのままにすることをお勧めします。質問が間違っていることを前提とし(TS機能は)とペアにすることができる一方で、それはとペアにする必要があります。基本的には、ES6モジュールのインポート/エクスポートとCJS / AMDです。ecmascript-6
typescript
export =
import ... from
import =