Если компилятор не может определить, что свойство инициализировано правильно, и если вы уверены, что , то вы можете сообщить об этом компилятору с помощью модификатора утверждения определенного присваивания (!
) в объявлении свойства:
private _bar!: number; // definitely set in constructor, no error now
Очевидно, было бы лучше, если бы компилятор мог проверить это за вас, но на это мало надежды, поскольку инициализация происходит внутри, что составляет вызов функции / метода, и компилятор в основном предполагает, что такие вызовы не изменяют какое-либо состояние. Это предположение не всегда верно (например, прямо сейчас оно неверно), но оно прагматично; полностью анализ всех побочных эффектов вызова функции / метода невозможно реализовать (по сути, это имитирует программу, запускаемую на всех возможных входах), поэтому любой анализ должен быть эвристическим c и обязательно неполные или необоснованные. См. microsoft / TypeScript # 9998 для довольно продолжительного обсуждения возможных компромиссов.
Хорошо, надеюсь, это поможет; удачи!
Детская площадка ссылка на код