Объект со значением Null в параметрах методов TypeScript
Я изучаю Angular по учебному проекту. У меня стоит 11 версия, в учебнике используется 9. В учебнике определяется переменная:
selectedBook: BookModel = null;
значение null используется для отображения всего списк. У меня так не пропускала IDE? поэтому я исправил на такой вариант:
selectedBook: BookModel | null = null;
Вот только это исправление потянуло за собой правку всех методов и кода внутри методов:
selectBook(book: BookModel | null): void {
bookServis.add(book) - тут тоже ругается, что тип не null
bookServis это интерфейс
add(t: T): Observable<T> {
...
}
и когда я в html файле присваиваю переменную selectedBook объекту BookModel
[selectedBook]="selectedBook"
тоже ругается, что BookModel не может быть null
т.е. теперь везде, где используется переменная selectedBook приходится указывать, что в тип объекта может быть еще и null. Как то можно от этого наследия избавиться? А то не очень красиво получается, вроде как это null только при старте приложения задействован, а приходится везде его учитывать. Может можно это как-то переделать, но я чет не представляю как, в обычных языках null для объекта ни каких проблем не вызывает, а тут с этим проблема.
Ответы (1 шт):
Если книга адекватная, то возможно, её код рассчитан на выключенный strictNullChecks в конфиге тайпскрипта. Впрочем, его рекомендуется включать.
Если это какой-то одиночный косяк, то можно обмануть тайпскрипт так:
selectedBook: BookModel = null!;
Если поле присваивается в конструкторе, то присваивание вообще писать не надо:
selectedBook: BookModel;
Если поле присваивается в конструкторе, но не непосредственно в нём, а в каком-то другом методе, из-за чего тайпскрипт этого не видит, то можно объявить так:
selectedBook!: BookModel;