Итерация по объекту с индексированными свойствами - PullRequest
0 голосов
/ 18 июня 2020

У меня есть переменная, определенная следующим образом:

const myObjects : { [ id : number ] : MyObject | undefined } = {};

каждый раз, когда я добавляю объект в эту переменную, это будет выглядеть так:

let i=0;
myObjects[++i] = obj1;
myObjects[++i] = obj2;

когда я хочу удалить объект, который я делаю:

myObjects[0] = undefined;

Есть ряд мест, где мне нужно перебрать все сохраненные объекты и что-то сделать. Вот где я получаю ошибку eslint от @ typescript-eslint / no-non-null-assertion

мой код выглядит так:

for( const idString in myObjects ) {
  const id = +idString;
  const obj = myObjects[id]!; //eslint error here
  for( const car of obj.cars ) {
    console.log( car );
  }
}

Чтобы избавиться от ошибки eslint , Я мог бы обернуть внутренний for-l oop внутри оператора if, чтобы гарантировать, что obj! == undefined вот так:

for( const idString in myObjects ) {
  const id = +idString;
  const obj = myObjects[id];
  if( obj ) {
    for( const car of obj.cars ) {
      console.log( car );
    }
  }
}

Технически obj никогда не должен быть undefined, если я получаю все идентификаторы из myObjects во внешнем for-l oop. Есть ли лучший способ написать этот код? Есть ли лучший способ получить идентификатор (номер) ... похоже, что внешний for-l oop автоматически преобразует все свойства в строки, хотя определение TypeScript для myObjects говорит, что это должно быть число.

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