Почему определение свойства объекта после определения переменной не работает?

Есть код:

interface foo { [property: string]: number }

var bar: foo = { baz: 1 };

bar.bak = 1;


Мы можем определить переменной свойство `baz`, но не можем потом добавить свойство `bak`, потому что оно не подходит под интерфейс. В то же время, компилятор не ругается если мы хотим добавить свойство в момент определения переменной. Разницы не должно быть никакой, но компилятор работает вот так.

Как это работает, и есть ли решение чтобы это обойти?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Riim
Мож так:
interface foo { [property: string]: number; bak?: number; }

var bar: foo = { baz: 1 };

bar.bak = 1;

?
Ответ написан
Sivkoff
@Sivkoff
Web Developer
Структура, которую вы пытаетесь описать, называется словарь. У нее нет такого понятия как свойство, есть понятие индекс. Соответственно и обращаться надо по индексу, т.е. так:
bar['bak'] = 1;
Если вам нужно непременно обращение как к свойству, укажите тип как any:
var bar: any = { baz: 1 };
bar.bak = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы