2017-05-24 13 views
1

私は、依存関係をインポートするための定型文を減らすためのいくつかの方法を探していて、Typescriptの名前空間とそれらが複数のファイルにどのようにマージされているのかを見つけました。たとえば:任意の種類のインポートと名前空間宣言をマージすることは可能ですか?

foo.ts

namespace app { 
    const foo = bar() // foo is 42 now 
} 

bar.ts

namespace app { 
    export function bar() { 
    return 42 
    } 
} 

限り、両方のファイルが活字体プロジェクトに追加されているとして、それが正常にコンパイルして、依存しますバンドルされているか実行されているかについて、うまく動作するかもしれません(ここではソースファイルの順序が重要です)。私はすべての単一の依存関係のためのインポートステートメントを入力する必要がないことが気に入っています。 1つの名前空間にすべてのものを置くことは、普通のJavascriptで狂っているかもしれませんが、すべてのシンボルとそれらが使われている場所を追跡できるので、Typescriptの魅力のように機能すると思います。

ここで、ピクルは、いずれかのソースにインポートまたはエクスポートステートメントがない場合にのみ機能します。 2番目は外部ライブラリをインポートしようとしましたが、そのソースファイルは独自のモジュールになり、もう一方の名前空間は自動的にマージされなくなりました。

requireを使用しても、インポートの種類を取得するうえで便利な方法はありません。

この名前空間を外部インポートとマージする方法はありますか?

答えて

1

ジャバスクリプト内の各モジュール、従ってtypescriptですに、別個の、単離された名前空間です。

単一の依存関係ごとに明示的なインポートステートメントを持つことは、モジュラプログラミングが大事です。その目的は、各モジュールが必要最小限の依存関係を持つ自己完結型の小さなコードであることです。多くの良いnode.jsパッケージは、このスタイルに従います。

あなたは完全に異なる外観を記述している - あなたは大量のコードを持っている場合、それは確かに依存関係を考えず、どこからでもすべてのものへのアクセス権を持っていると便利に思えるかもしれません。しかし、モジュールはこのスタイルには適していません。

+0

私にはモジュールが実装の詳細をカプセル化し、モジュールにアクセスするための明確なインタフェースを定義についてです、これらは基本的にエクスポートプロパティです。ファイルの上部にある依存関係の一覧は素晴らしいですが、モジュールユーザーの観点から見ると、これは単なる実装の詳細なものです。他の言語では、独立したモジュールを形成する一連のファイルの概念を持つのが一般的です。Typescriptでも同様のことができると思います。 – Gunchars

+0

モジュールを構成する一連のファイルを持つことは、これらのファイル間で共有される暗黙的に定義されたスコープがあることを意味します。言い換えれば、グローバリゼーションスコープのあまりよく定義されていない変種です。 javascriptではモジュールが導入されました。なぜならjavascriptにはそれほど悪いことがあったからです。 npmの「エコシステム」を備えたnode.jsのデモンストレーションとして、かなりうまく機能します。 – artem

0

は、ここで私はこれまでに発見したインポートの問題を克服する一つの潜在的な方法です。

external.d.tsメインアプリケーションコードで

import * as events from "events" 
import * as ts from "typescript" 

declare global { 
    // if using @types/node 
    interface NodeRequireFunction { 
    (id: "events"): typeof events 
    } 
    // if declaring your own require function 
    function require(id: "typescript"): typeof ts 
} 

、単に通常通りrequire関数を使用します。

main.ts

namespace app { 
    // Both of these will be correctly typed 
    const {EventEmitter} = require("events") 
    const ts = require("typescript") 
} 

これは、いくつかの決まり文句が追加されますが、少なくともそれは一度だけ外部モジュールあたりです。アプリケーションコードは必要なモジュールをエクスポートしてどこにでもアクセス可能にします。

関連する問題