2016-05-06 7 views
1

インスタンスではなく抽象クラスを拡張するクラスを格納するために、抽象クラスの指示を出したいと思います。しかし、私は問題があります。TypeScriptの抽象クラスの指示

abstract class AbstractClass{ 
    foo(){ 
     // do someThing 
    } 
} 

class ConcreteClass extends AbstractClass{ 
    foo(){ 
     super.foo() 
    } 
} 


interface ClassDicctionary { 
    [index:string]: typeof AbstractClass 
} 


let dicctionary : ClassDicctionary = { "ONE" : ConcreteClass } 

new dicctionary["One"]().foo() // Error. It can´t instance a abstrac class (of course) 

私はこれをどうやって得ることができると思いますか?

私はそれが必要なので、AbstractClassから抽象修飾子を削除したくありません。これは異なっており、それがどのように動作するか、なぜ代わりに定型を追加する

答えて

0
abstract class AbstractClass{ 
    foo(){ 
     // do someThing 
    } 
} 

class ConcreteClass extends AbstractClass{ 
    foo(){ 
     super.foo() 
    } 
} 


interface ClassDicctionary { 
    [index:string]: new() => AbstractClass; // <--- 
} 


let dicctionary : ClassDicctionary = { "ONE" : ConcreteClass } 

new dicctionary["One"]().foo(); 
+2

は、あなたが説明する必要があります。 – SLaks

+0

迅速な対応をありがとう。それは良い解決策と思われるが、私は、コンストラクタ コンストラクタ(FOO:文字列)を変更した場合: [インデックス:文字列]:{ } を私はこのmodiftyしなければならない新しい(... argsを)=> AbstractClassを。 // <--- 子クラスを持つパラメータの数がわからないため、このコードにはエラーが表示されません。 新しいdicctionary ["One"]()。foo(); //引数はありませんが、¿ok? –

+0

あなたはどのクラスを構築しているのか分からないので、 '... args'の代わりに(あなたの場合は0個の引数を使って)呼び出すための構造署名を書くべきです。 –

-1
abstract class AbstractClass{ 



    constructor(foo:string){ 

    } 

    foo(){ 
     // do someThing 
    } 
} 

class ConcreteClass extends AbstractClass{ 


    constructor(foo:string, bar: number){ 
     super(foo) 
    } 

    foo(){ 
     super.foo() 
    } 
} 


interface ClassDicctionary { 
    [index:string]: new(...args) => AbstractClass; // <--- 
} 


let dicctionary : ClassDicctionary = { "ONE" : ConcreteClass } 

new dicctionary["One"]().foo(); // No error but It needs some arguments 
+0

質問に詳細を追加するためにあなたの質問に答えず、代わりにあなたの質問を編集してください –