Как я могу выдать ошибку TypeScript при попытке получить доступ к свойству потенциально неопределенного массива? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть переменная с типом SomeObject[] | undefined, и я обращаюсь к свойству .length, но TypeScript не предупреждает меня о том, что он потенциально неопределен. Вот скриншот из vscode:

Screenshot from VSCode

Как видите, красной волнистой линии нет.

Я пытался воспроизвести это на площадке TypeScript, но я не могу (она всегда предупреждает меня о потенциально неопределенном свойстве).

Я включил strict, strictNullChecks, strictFunctionTypes, strictPropertyInitialization и strictBindCallApply, но я не могу найти вариант, чтобы TypeScript выдавал ошибку здесь.

Какой параметр мне нужно включить, чтобы TypeScript предупреждал меня о потенциально неопределенном свойстве?

Редактировать: Поскольку кто-то добавил тег vscode, я должен также добавить, что при запуске tsc --noEmit -p . нет ошибок или предупреждений, поэтому речь идет не о vscode.

1 Ответ

0 голосов
/ 03 апреля 2020

Так что я понял это. Эта история состоит из двух частей:

Причина, по которой я начал эту охоту goose, была из-за ошибки типа времени выполнения, когда свойство .reports было undefined. Но проблема здесь была не в TypeScript, а в том, что я печатал подсказку от сервера, фактически не проверяя, что данные имеют правильный тип. Так что да, .reports был неопределенным, но тип .reports сказал, что он не может быть неопределенным.

Но код Visual Studio говорит, что свойство может быть undefined? Откуда он это знает и почему он не предупреждает меня при доступе к свойству .length?

Оказывается, подсказка типа vscode неоднозначна. Это говорит о том, что выражение , которое я нахожу, это FilteredReport[] | undefined, что не то же самое, что свойство , имеющее этот тип (я должен сказать, что я действительно так думаю похоже, что они представляют тип свойства там). Тип свойства на самом деле просто FilteredReport[], но из-за необязательной цепочки выражение может иметь значение FilteredReport[] | undefined.

Я создал проблему для vscode, связанную с подсказкой: https://github.com/microsoft/vscode/issues/94348

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...