2017-03-05 10 views
1

私は最近ECMAScript 6互換のJavaScriptからTypeScriptに変換されたNode.jsプロジェクトを持っています。私は、TypeScriptとES6がどのように相互作用するか、特に名前空間とタイプに関して、完全には熟知していません。TypeScript ES6名前空間

私のプロジェクトには、sqlと呼ばれるサブフォルダがあり、それは聞こえても、プロジェクトのMySQLデータベースとやり取りするためにいくつかの機能をエクスポートします。 Sql.Models名前空間で自分のDBモデルタイプを整理したいので、それらを参照することができます。 Sql.Models.User。私のモデルはsqlフォルダ内にある1つまたは複数の.d.ts個のファイルで宣言したいと思いますが、これらのタイプを他の場所で参照できるように正しく構成する方法がわかりません。私は明らかにできませんrequireまたはimport.d.tsファイル;これは有効なTypeScript操作ではありません。別のES6互換型TypeScriptモジュールの.d.tsファイルで宣言されたタイプSql.Models.Userを使用するにはどうすればよいですか?

答えて

0

他のES6互換型TypeScriptモジュールの.d.tsファイルで宣言されているSql.Models.User型を使用するにはどうすればよいですか?

次の非常に簡単な設定が行われます。

root 
    sql 
    models.d.ts 
    index.ts 
    tsconfig.json 

model.d.tsファイルは、名前空間と型を宣言します。イメージが示しているように、index.tsファイルは、その名前空間のエイリアスおよび/またはそれに直接アクセスできます。

enter image description here

上記活字体バージョン2.2.1を使用しています。

+0

私はこのように設定すると、ルートレベルの名前空間 'Sql'を持つ別のファイルから' Sql.Models'にアクセスできません。おそらく、私はC#の仕組み、つまり複数のファイルが名前空間に参加できるという点ではあまりにも多くのことを考えています。 私は 'Sql'名前空間を提供するクラスを1つ持ち、私のプロジェクトの他のファイルが必要とする必要があるのは私だけです。 'query'のようないくつかの一般的な関数を定義します。しかし、私はまた、例えば前述のようなモデルを提供する他の名前空間を望んでおり、すべてが 'Sql'名前空間の子である。 – briman0094

+0

「Sql」という1つの名前空間と「Sql.Models」という別の子名前空間を使いたいと思っていますか? –

+0

それは正しいです。私はモデルインタフェースをエクスポートした 'sql.ts'の隣に' models.ts'ファイルを置いて 'sql.ts'でそれらをインポートし、それらを適切な名前空間の中に再エクスポートすることでこれを解決することができたと思いますこれはかなり好きではありませんが、実際には名前空間をエクスポートすることはできません。それは働き、私が望む最終結果をもたらします。 – briman0094

0

私は奇妙に聞こえるが実際にはそうでない "エイリアシングされた内部のインポート"を使用することで、それほど美しくない方法でこれを解決しました。エイリアスを内部シンボルにエクスポートします。内部シンボルは別のファイルからインポートされたシンボルです。私は一つだけのファイルを参照する必要がありますが、これは思えないように、私は2つのファイルにし、何とか別からのエイリアスの名前空間を定義することができますどのようにC#の作品のようなものを、好適だろう

source code

ECMAScript 6互換のTypeScriptで可能です。