2017-01-11 6 views
0

の内側に何もする必要があり、それはこのようなモジュールの一部である代わりにanyのデータ型を、持つことが可能です:データ型は、モジュールtypescriptです

module SomeModule { 
    export class One { 
     // ... 
    } 

    export class Two { 
     // ... 
    } 

    // ... 
} 

私はこのような何かが必要です。

function bla(myModel: anyThingInsideModule_insteadOfAnyDataType){...} 

これは可能ですか?

答えて

1

ありませんが、あなたはそれらをベースインタフェース/クラスを拡張/実装することができます:

module SomeModule { 
    export interface Base { } 

    export class One implements Base { } 

    export class Two implements Base { } 
} 

function bla(myModel: SomeModule.Base) { } 

または:

module SomeModule { 
    export abstract class Base { } 

    export class One extends Base { } 

    export class Two extends Base { } 
} 

をあなたはまた、機能を汎用的にすることができます。

function bla<T extends SomeModule.Base>(myModel: T) { } 
+0

何を書くことができますか?そうすれば、何かを拡張したり実装したりする必要はありません。 – toskv

+1

新しいクラスが追加または削除されるたびに関数のシグネチャを変更する必要があります。共通の型を拡張/実装する場合、関数 –

+0

を変更する必要なくクラスを安全に削除/追加することができますが、その場合はすべてのクラスがベースを実装または拡張するようにする必要があります。どちらの場合も、何とかそれを管理する必要があります。彼らが共通の機能や動作をしていればうまくいけません。マーカーインターフェイスを持っていれば、ちょっとだけそうです。 :)また、必要なクラスのみを含むTypeを作成する方が簡単です。そうすれば、すべてが集中化され、クラス階層は必要ありません。 :) – toskv

1

TypeScript 2.0では、パラメータまたは変数に複数の可能なデータ型を指定できます。

function bla (myModel: One | Two) 

次にどちらのタイプのパラメータも使用できます。 (私は悪いデザインだと思いますが、ちょっと、私は判断していないよ明らかに100+クラス)以下のコメントに書かれたようSomeModelは、非常に大きい場合には

EDIT 、それはおそらく最も簡単でしょうSomeModelabstractの基底クラスを作成し、そのモデルのすべてのクラスをそれから派生させます。

export abstract class MyModelClass { /* Any shared logic here */ } 

export class One extends MyModelClass { ... } 

export class Two extends MyModelClass { ... } 

... 

次に、あなたがBLA(:| 2つの1 mymodelという)について

function bla(myModel: MyModelClass) { ... } 
+0

いい考えですが、SomeModelには100以上のクラスがあります。 – ASfdsa33

+0

さて、あなたはそれについて言及していませんでした。 –

関連する問題