javascript как динамически добавлять дочерние дикты к родительским диктовкам - PullRequest
0 голосов
/ 18 марта 2020

У меня есть объект Javascript, например, так:

const childDict = {
  address: {
    zip: "GGHG654",
    city: "Morocco",
    number: 40
  }
}

Я хочу динамически добавить его в другой родительский словарь в al oop, например:

let parentDict = {}

for(let i = 0 ; i < 3; i++){
  parentDict["place" + i] = childDict
}

Итак в конце я получаю один из таких слов:

{
  place0: {
    address: {
      zip: "GGHG654",
      city: "Morocco",
      number: 40
    }
  },
  place1: {
    address: {
      zip: "GGHG654",
      city: "Morocco",
      number: 40
    }
  }
}

Однако, для l oop выдает ошибку компиляции:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
  No index signature with a parameter of type 'string' was found on type '{}'.

Ответы [ 4 ]

1 голос
/ 18 марта 2020
let parentDict = {}

У этого типа нет явного набора, который вызывает эту проблему. Попробуйте указать тип any, например:

let parentDict:any = {}

Или, если быть более точным:

let parentDict:{[key: string]: object} = {}
1 голос
/ 18 марта 2020

Вам просто нужно добавить соответствующий интерфейс в родительский словарь, так как машинопись автоматически назначает тип на основе начального значения, у которого нет ключей

interface IParentDict {
    [key: string]: any; // possibly change any to the typeof child dict
}
const parentDict: IParentDict = {};
0 голосов
/ 18 марта 2020

Ваше решение работает, вам просто нужно указать тип parentDict как любой тип. Вы пытались сделать console.log (parentDict) после для l oop

0 голосов
/ 18 марта 2020

попробуйте вот так

let parentDict: any = {};

другой вариант может быть более точным указанием типа, например

let parentDict: {[key: string]: any} = {};

Еще один хакерский путь -

let parentDict = {}

for(let i = 0 ; i < 3; i++){
    (parentDict as any)["place" + i] = childDict
}
...