машинопись: не удается применить функцию parseInt() к строке в заголовке HTTP-запроса

#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));