2017-02-15 8 views
1

TypeScriptのモジュールインポート/エクスポートシステムであるで私を逃してしまい、名前を付ける必要がない彼だけが習得した暗い芸術のように感じる... I私は次のインポートを少しクリーナー同じモジュール名で複数のファイルにまたがってTypeScriptをインポートする

B.ts

export module System { 
    export class Bravo { 
     constructor(n: number) { 
      console.log(`Bravo ${n}`); 
     } 
    } 
} 

A.tsを作ることができる方法を理解しようとしている

私は私には、痛み親指のように突き出て、この

  • import { System as System1 }
  • extends System1.Bravo

については好きではない何

import {System as System1} from "./B"; 

export module System { 
    export class Alpha extends System1.Bravo { 
     constructor() { 
      super(123); 
     } 
    } 
} 

!それを清潔にする方法はありますか?

  • import { System.Bravo } from "./B";
  • extends Bravo

このような何か?私が実際に達成しようとしているどのようなサイドノートとして

は、名前空間、すなわちSystem.Foo.Bar.MyAwesomeClass

  • 適切な使用です。
  • クラスを独自のファイルに分割して、ビルドに必要のないものが含まれないようにします。
  • については、木が揺れていますか?
  • 依存性を管理するメカニズムとしてエクスポート/インポートを使用します。

答えて

1

これは異なるアプローチですが、探しているのと同じ結果が得られるはずです。

モジュールSystemの代わりに、ファイルシステムを使用して、すべてのファイルを結合したモジュールに入れて、index.tsファイルにすることができます。だからSystemというディレクトリがあります。したがって、このような何か:

/System/Bravo.ts

export default class Bravo { 
    constructor(n: number) { 
    console.log(`Bravo ${n}`); 
    } 
} 

/System/Alpha.ts

import Bravo from "./Bravo" 

export default class Alpha extends Bravo { 
    constructor() { 
    super(123); 
    } 
} 

は、その後の両方が含まindex.tsファイルが含まれています。あなたがモジュール全体をインポートするたび

/System/index.ts

その後
import Alpha from "./Alpha"; 
import Bravo from "./Bravo"; 

export { Alpha }; 
export { Bravo }; 

、あなたはどうなる:

import * as System from "<relativePath>/System"; 

let alphaClass = new System.Alpha(); 
let bravoClass = new System.Bravo(1); 

を同様に、あなただけのAlphaをしたい場合、あなたはそのようにそれを直接インポートすることができます。

+0

私が間違っていれば正解ですが、この場合実際に放出されるコードはnですモジュール内に存在するか、または名前空間(まだ違いが完全には分かっていない)なので、これを使って自分の型をグローバルスコープから隔離するにはどうすればよいですか? – series0ne

+0

あなたのように、モジュールシステムは私にとって大変なことです。私は "module"は非推奨であり、代わりに "namespace"を使うべきだと私は見ているので、 "module"キーワードは使用しません。 – DeeV

+0

タイプの衝突が心配な場合は、衝突のないさまざまなクラスタイプに同じ名前を使用できます。 "default"キーワードを使用すると、 '{Alpha}'のように中括弧でインポートしない限り、インポート時に実際に名前を付けることができます。その場合、 '{Alpha as AnotherAlpha}'を実行する必要があります。しかし、そうでなければ、 './System/Alpha"から 'MySuperAwesomeClass'のような' Alpha'クラスをインポートすることができ、それを 'MySuperAwesomeClass'として使用します。 – DeeV

関連する問題