#typescript
Вопрос:
В typescript я пытаюсь получить атрибут из заголовка http-запроса.
Атрибут является строкой (конечно, это из заголовка), мне нужно разобрать его на целое число
export const getUser = async (req, _res, next) => {
const userId: number = parseInt(req.headers.userid);
... other code
}
Тем не менее, среда разработки vs code отображает красную строку под req.headers.userid
и жалуется:
(property) IncomingMessage.headers: IncomingHttpHeaders
Argument of type 'string | string[] | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.ts(2345)
Как я могу выполнить эту простую задачу?
Комментарии:
1. Покажите еще какой-нибудь код или даже ссылку на игровую площадку
Ответ №1:
В этом сообщении об ошибке говорится , что ваша переменная введена string | string[] | undefined
, но parseInt
требуется string
. Так что вам придется иметь дело с другими типами, которые userid
могут быть.
Может быть, что-то вроде:
const userIdHeader = req.headers.userid
if (typeof userIdHeader === 'string') {
const userId = parseInt(userIdHeader);
}
Теперь вы можете получить доступ к этому коду только в том случае, если у вас есть строка, и typescript ее знает.
Итак, документы по сужению для получения дополнительной информации.
Ответ №2:
У меня просто была точно такая же проблема, и я решил ее с помощью:
const userIdHeader = req.headers.userid;
const userId = parseInt(String(userIdHeader));
Или лучше:
const userId = parseInt(String(req.headers.userid));