Не забудьте включить --strictNullChecks
, параметр компилятора . Предположительно, у вас есть файл tsconfig.json
в вашем проекте; Вы должны указать это там. На самом деле, я рекомендую использовать --strict
, который включает --strictNullChecks
плюс другие полезные вещи. Надеемся, что это должно начать предупреждать вас с такими ошибками:
data.employment.wage // error!
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
Добавление восклицательного знака не поможет; это ненулевое утверждение , что означает, что вы сообщаете компилятору, что, хотя it считает, что объект может быть неопределенным, you уверены, что это не так. Это в основном противоположность вашей проблемы. Если вы сделаете это:
data.employment!.wage // no error now
будет подавлять ошибку, которая включается --strictNullChecks
, но взрывается во время выполнения, так как вы солгали компилятору. Это утверждение предназначено для таких ситуаций:
// this ends up setting data.employment to {} but the compiler doesn't realize it
Object.assign(data, { employment: {} });
data.employment.wage // error! but we know it *is* defined
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
data.employment.wage // no error now
Система типов TypeScript существует только во время разработки (когда вы пишете программу) и полностью стерта из запущенного JavaScript, который работает. Если вы хотите, чтобы проверка во время выполнения происходила, вам нужно написать эту проверку во время выполнения и позволить средству проверки типа TypeScript убедиться, что вы сделали это:
data.employment = {}; // set the property in a way the compiler recognizes
data.employment.wage; // no error now
TypeScript пытается предоставить реализации для предложенных функций JavaScript, и в конечном итоге может быть поддержка необязательной цепочки в JavaScript, но текущее предложение только на Этап 1 , и общая политика сопровождающих TypeScript состоит в том, чтобы реализовывать языковые дополнения только после того, как они достигают стадии 3. Таким образом, TypeScript пока не поддерживает необязательную цепочку пока с TS3.4.
Хорошо, надеюсь, это поможет. Удачи!