2016-11-06 46 views
2

所以,在這裏我試圖使接口類型的對象只包含特定的接口。例如:如何聲明另一種接口類型的可迭代對象?

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

我想你想是這樣的:

export interface Room { 
    users: UserMap; 
} 

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

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

[userId: string]: IUser;是什麼叫做字符串索引簽名。這意味着,無論何時使用字符串索引到UserMap,您都將獲得IUser

+0

感謝您的回答!我不知道我應該在谷歌搜索什麼。現在我記得它是一種地圖類型。 – Nika

+0

當然,索引簽名是爲了在JavaScript中爲類似地圖的對象建模,但它並不明顯。希望有人搜索找到這個答案。如果你正在使用這些類型,你可以使用'interface'聲明來代替'class'(因爲'interface'沒有任何發射)。 –

+0

你說得對。我忘了提及界面,它很快寫出了沒有太多思考的例子,並且很累。感謝您的建議! P.S編輯了這個問題,用接口替換了類。 – Nika