2017-05-18 10 views
0

インスタンスをエクスポートするクラスAがあります。 Aには、A.Bというインスタンスを返すメソッドがあります。インスタンスと静的内部クラスの両方を何とかエクスポートできますか?クラスAのインスタンスとネストされたクラスA.Bをエクスポートします。

class A { 
    public static B = class {} 

    getB(): A.B { // <- compile error 
     return new A.B(); // this works fine 
    } 
} 

export default new A(); 
export { A.B } 

私はJavaのバックグラウンドから来ています。わかりましたが、わたしはここでちょっと悩んでいます。私は代わりにモジュールで何かをやろうとしていると思いますか?

ここで私はそれを使用したい方法は次のとおりです。

import a from "./A"; 
import { A.B } from "./A"; 

let b: A.B = a.getB(); 
+0

は、なぜ、それを "内部クラス" を作りますか? –

+0

@NitzanTomer私は、データの構造的分離を維持しながら、2つのクラスが本当に一緒に属していることを暗示したいと思います。 –

+1

このアプローチはあなたに痛みをもたらすだけです。 Typescriptはこれとはまったく違うので、同じように考えるべきではありません。たとえば、内部クラスは外部クラスのメンバーにアクセスできません。あなたはそれを埋め込むことによって何も得られません。また、クラスではなく、 'A'のインスタンスだけをエクスポートする点は何ですか?それはシングルトンですか? –

答えて

0

クラスをネストには、Javaの反射だったが、私が本当に表現したかったことは、コードの両方のために管理されているAとBとの間の密接な関係です。 @NitzanTomer's answerを変更

は、ここに私のために働いたものだ:

class A { 
    getB(): B { 
    return new B(); 
    } 
} 

export class B { 
} 

export default new A(); 

次に使用方法は簡単です:

import a from './my-library'; 
import {B} from './my-library'; 

let b: B = a.getB(); 
1

あなたがAの複数のインスタンスを必要としない場合は、多分それはクラスではありません...
これはどのようにアプローチ:

class B { } 

const singleton = { 
    getB(): B { 
     return new B(); 
    } 
}; 

export default singleton; 
+0

JavascriptはJavaのようにオブジェクト指向ではありません。 。 1つのインスタンスしか必要なく、継承が必要ない場合、クラスを持つことは冗長です。私はあなたが "AとBをマージする"ことが何を意味するかは分かりません。あなたの状況が何であるかをもっと説明すれば、自分のアプローチを明確にしたり、それが適切でないことに同意することができます。 –

+0

クラスBがエクスポートされないため、これは機能しません。私はB型の変数を宣言することはできません。このようなことが可能ですか? エクスポート{B}; デフォルトのシングルトンをエクスポートします。 –

関連する問題