Объект со значением 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 шт):

Автор решения: Qwertiy

Если книга адекватная, то возможно, её код рассчитан на выключенный strictNullChecks в конфиге тайпскрипта. Впрочем, его рекомендуется включать.

Если это какой-то одиночный косяк, то можно обмануть тайпскрипт так:

selectedBook: BookModel = null!;

Если поле присваивается в конструкторе, то присваивание вообще писать не надо:

selectedBook: BookModel;

Если поле присваивается в конструкторе, но не непосредственно в нём, а в каком-то другом методе, из-за чего тайпскрипт этого не видит, то можно объявить так:

selectedBook!: BookModel;
→ Ссылка