2016-11-06 20 views
2

ここでは、特定のインターフェイスのみを含むObjectのインターフェイスタイプを作成しようとしています。たとえば:別のインタフェースタイプの反復可能オブジェクトを宣言するには?

export interface IUser { 
    name: string; 
    last: string; 
}; 

export interface IRoom { 
    users: Object<IUser>; // this is wrong. 
} 

私は、ユーザーがのようなものになることを、期待してい:

Users: { 
    'user_id_goes_here': { 
    name: 'John', 
    last: 'Doe' 
    }, 
    'user_id_goes_here': { 
    name: 'Albert', 
    last: 'Einstein' 
    }, 
    ... 
} 

は、このようなインターフェイスメンバの型を定義する方法はありますか?

答えて

3

私はあなたがこのような何かしたいと思う:[userId: string]: IUser;文字列のインデックス署名と呼ばれるものであることを

export interface Room { 
    users: UserMap; 
} 

export interface UserMap { 
    [userId: string]: User; 
} 

export interface User { 
    name: string; 
    last: string; 
}  

を。つまり、文字列を使用してUserMapにインデックス登録すると、いつでもIUserが得られます。

+0

答えをありがとう!私はgoogleで何を検索すべきか分からなかった。今はマップタイプだと思います。 – Nika

+0

もちろん、インデックスシグネチャはJavaScriptのマップに似たオブジェクトをモデル化するためのものですが、何が呼び出されるのかは明らかではありません。うまくいけば、誰かがこの答えを見つけることを願っています頭を上げるために、これらを使っているのが型であれば、 'class'の代わりに' interface'宣言を使うことができます( 'interface'sにはemitがありません)。 –

+0

あなたはそうです。私はインターフェイスを言及することを忘れて、それはすぐに多くの考えなく書かれた例だったし、疲れていた。アドバイスありがとう! P.Sは質問を編集し、classをinterfaceに置き換えました。 – Nika

関連する問題