2014-10-19 2 views
0

У меня есть следующий Javascript объект:Как создать интерфейс для коллекции объектов?

{ 
    "dataMap":{ 
     "2027":{ 
      "userId":2027, 
      "code":"abcdef", 
      "title":"abcdef", 
      "questions":1 
     } 
     "2028":{ 
      "userId":2028, 
      "code":"abcdef", 
      "title":"abcdef", 
      "questions":1 
     } 
    } 
} 

Он содержит другой объект dataMap и внутри, которые являются другой объектной реализацией. Может ли кто-нибудь помочь мне, рассказав мне, как я могу создать интерфейс для объекта dataMap?

То, что я хотел бы, чтобы иметь интерфейс, так что я могу войти:

var a = b.dataMap[2027].userId // okay and allowed 
var a = b.dataMap[2027].xxxyId // gives a typescript error 
+0

Пожалуйста, уточните, что именно вы подразумеваете под «интерфейсом» – hindmost

+1

@hindmost Интерфейс в стиле Виджета явно. – Niko

ответ

1

Вы можете использовать интерфейс с индексом подписи:

interface User { 
    userId: number; 
    code: string; 
    title: string; 
    questions: number; 
} 

interface DataMap { 
    [index: number]: User; 
} 

И для конкретного примера, в котором данные карта снова содержится в объекте:

interface DataMapContainer { 
    dataMap: DataMap; 
} 

var b: DataMapContainer = { "dataMap": { ... } }; 
b.dataMap[2027].userId; // okay 
b.dataMap[2027].xxx; // error 

Смотрите также: TypeScript interface for object with arbitrary numeric property names?

Смежные вопросы