Добавить интерфейс к возможному нулевому значению с Typescript - PullRequest
0 голосов
/ 19 октября 2019

Я использую Express, Typescript и драйвер MongoDB Node.JS для разработки моего API;в настоящий момент у меня возникла проблема с методом findOne, потому что возвращалось обещание, но только для объекта с первым документом совпадал запрос или просто ноль, если что-то пойдет не так.

Так что я пытаюсьполучить этот объект в переменную после разрешения Promise, поэтому у меня есть что-то вроде этого:

let user = await db.collection('collectionName').findOne({ email: "example@stack.com" });

Поэтому, когда я пытаюсь установить интерфейс для моей переменной, я получаю следующую ошибку:

let user: UserStructure = await db.collection('collectionName').findOne({ email: "example@stack.com" }); 

// Type 'object | null' is not assignable to type 'UserStructure'.
// Type 'null' is not assignable to type 'UserStructure'.

Несколько советов?

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

@ Шенон верна. TypeScript заботится о значении, которое может быть нулевым / неопределенным, что в дальнейшем может привести к ошибке нулевой ссылки.

При желании вы можете установить "strictNullChecks":false в вашем tsconfig.json в compilerOptions

2 голосов
/ 19 октября 2019

Здесь происходит то, что машинопись пытается защитить вас, mongodb пометил эту функцию как возвращающую ноль, но ваш код не защищает от нуля.

Измените код для защиты от нуля вспособ машинописи может анализировать и изменять тип переменной, чтобы учесть нулевое значение, и ошибка исчезнет.

let user: UserStructure | null = await db.collection('collectionName').findOne({ email: "example@stack.com" });
if(!user) return res.status(400).send("No user could be found")
// user will now be UserStructure after this early return. and not UserStrcuture | null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...