Angular: Как вы идентифицируете объекты JSON с идентификаторами? - PullRequest
0 голосов
/ 11 октября 2018

Чтобы, надеюсь, упростить мой вопрос, я разбил его так:

Что я понимаю

Если это мой объект:

{ 
     things: [{
         'text': 'version'
         'short': 'v',
         'order': 1,
         'id': 'A'
     },{
         'text': 'update'
         'short': 'u',
         'order': 2,
         'id': 'B'
     }]
}

...то это мой тип класса:

 export class Thing {
     text: string;
     short: string;
     order: number;
     id: string;
 }

Что я не понимаю

Если , это мои данные:

 { things: {
         'A': {
             'text': 'version'
             'short': 'v',
             'order': 1,
             'id': 'A'
         },
         'B': {
             'text': 'update'
             'short': 'u'
             'order': 2
             'id': 'B'
         }
     }
 }

...то класс типа это ...?

Я пробовал действительно креативные, неэффективные попытки заставить это работать безрезультатно.Я также надеюсь, что смогу понять, что делать с этим массивом без массивов (без квадратных скобок).Извиняюсь, если это дубликат.

1 Ответ

0 голосов
/ 11 октября 2018

Во второй ситуации ваш тип things будет иметь вид индексный тип , например:

interface ThingHolder {
    [key: string]: Thing;
}

Это говорит о том, что ключи являются строками изначения: Thing с.

Интерфейс для data будет иметь то, что имеет свойство things этого типа:

interface AppropriateNameHere {
  things: ThingHolder;
}

Итак, компилятор счастливс этим:

const data : AppropriateNameHere = {
  things: {
    'A': {
      'text': 'version',
      'short': 'v',
      'order': 1,
      'id': 'A'
    },
    'B': {
      'text': 'update',
      'short': 'u',
      'order': 2,
      'id': 'B'
    }
  }
};

Пример Live на площадке TypeScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...