Почему определение свойства объекта после определения переменной не работает?
Есть код:
interface foo { [property: string]: number }
var bar: foo = { baz: 1 };
bar.bak = 1;
Мы можем определить переменной свойство `baz`, но не можем потом добавить свойство `bak`, потому что оно не подходит под интерфейс. В то же время, компилятор не ругается если мы хотим добавить свойство в момент определения переменной. Разницы не должно быть никакой, но компилятор работает вот так.
Как это работает, и есть ли решение чтобы это обойти?
Это не подходит для динамические генерируемых объектов. Вопрос в том, как создать описание объекта имеющего свойства каждый из которых соответствует одному конкретному интерфейсу. Самое главное: свойства должны генерироваться динамически.
Структура, которую вы пытаетесь описать, называется словарь. У нее нет такого понятия как свойство, есть понятие индекс. Соответственно и обращаться надо по индексу, т.е. так: bar['bak'] = 1;
Если вам нужно непременно обращение как к свойству, укажите тип как any: