#reactjs #typescript
Вопрос:
Привет, я использую jsonwebtoken для обработки веб-токенов. В настоящее время у меня есть страница, на которой необходимо расшифровать файл cookie, чтобы получить идентификатор пользователя. Я создаю функцию с именем getUserID, и она работает безупречно, но есть предупреждение машинописного текста о декодированном значении с использованием jsonwebtoken. Вот мой код:
import { useState, useEffect, useCallback } from 'react'
import Cookies from 'js-cookie'
import jwt from 'jsonwebtoken'
const TestPage = () => {
const [userId, setUserId] = useState<number | null>(null)
const getUserID = useCallback(() => {
if (Cookies.get('user_token')) {
const cookie = Cookies.get('user_token') || ''
if (jwt.decode(cookie)) {
const decoded: any = jwt.decode(cookie)
const user_id =
typeof decoded.user_id === 'number'
? decoded.user_id
: parseInt(decoded.user_id)
setUserId(user_id)
}
}
return null
}, [Cookies.get('user_token')])
useEffect(() => {
getUserID()
}, [])
return <div>User Id: {userId}</div>
}
export default TestPage
И это предупреждение об ошибке машинописного текста:
Type error: Argument of type 'string | (() => string)' is not assignable to parameter of type 'string'.
Type '() => string' is not assignable to type 'string'.
15 | typeof decoded.user_id === 'number'
15 | ? decoded.user_id
> 17 | : parseInt(decoded.user_id)
| ^
18 |
19 | setUserId(user_id)
Ответ №1:
Быстро и грязно
вы можете сделать это с помощью этого.
parseInt(decoded.user_id as string)
Это говорит TS, что идентификатор пользователя всегда будет строкой и никогда не будет функцией, возвращающей строку. Делайте это только в том случае, если вы знаете, что это правда.