Это все о Typescript.Когда вы используете public
, private
или protected
для параметров конструктора следующим образом
constructor(private logger: Logger) {}
На самом деле Typescript создает поле с тем же именем и устанавливает его для вас.Таким образом, вместо написания следующего кода вы можете просто написать код выше
private logger: Logger;
constructor(logger: Logger) {
this.logger = logger;
}
Поскольку вы уже написали private logger
, вы можете просто использовать свое поле с this
.Неважно, как вы используете его в конструкторе.
Есть Typescript Playground , где вы можете попробовать это и увидеть это сами.Все, что вы напечатаете в левом поле, будет преобразовано в обычный JS (ES5) в правом поле.
@Optional
декоратор просто сообщает Angular, что все в порядке, если он не может найти этот объект для инъекции.
Правило большого пальца:
Если вы используете private
, protected
или public
для любого поля и хотите его использовать, всегда используйте this
(в пределахконструктор)
Если вы не пометили поле ни одним из указанных выше ключевых слов, вы не можете использовать this
и не можете получить доступ к этому объекту вне конструктора.
Если вам нужен доступ ксвойство / метод класса, вы ДОЛЖНЫ использовать this
.