Когда вы удаляете heroes: Hero[];
, он все равно будет отображаться, потому что все это компилируется в JavaScript из TypeScript.
Чтобы легко визуализировать это в более простом примере, это будет очень похоже на следующее, добавлениек объекту, не назначая его сначала.
var exampleObj = {};
exampleObj.heroes = 'batman';
console.log(exampleObj);
Это нормально в JavaScript, и поэтому ваш список по-прежнему отображается, однако это недопустимый TypeScript и приведет к ошибкам компиляции.
Если я поменяю heroes: Hero [] на heroes: boolean или даже если я полностью удалю heroes: Hero [] из компонента heroes, мои герои все равно будут отображаться.И this.heroes по-прежнему получает назначение.
Таким образом, это означает, что он отображается, потому что он добавляется в класс, как только вы определите его из подписки.
Valid JavaScript, Yes.
Действительный TypeScript, №
Эта документация может помочь выделить некоторые различия