TypeScript React Hooks, проблема вывода пользовательских типов ловушек - PullRequest
0 голосов
/ 17 июня 2019

Итак, у меня есть этот пользовательский хук для декодирования токена

export function useToken(initial: string) {
  const [token, setToken] = useState<string>(initial)
  const [decoded, setDecoded] = useState<Token>()

  useEffect(() => {
    if (token) {
      const value = decodeToken(token)
      if (isTokenExpired(value)) {
        setDecoded(undefined)
      } else {
        setDecoded(value)
      }
    } else {
      setDecoded(undefined)
    }
  }, [token])

  return [decoded, setToken]
}

Тип возврата выглядит хорошо, здесь

[Token, React.Dispatch<React.SetStateAction<string>>]

У меня есть другой хук, который использует этот хук, но он неправильно видит тип возврата

export function useUser() {
  const [decoded, setToken] = useToken(getTokenFromStorage())
  //...

Здесь useToken дает и декодированный, и setToken один и тот же тип

Token | React.Dispatch<React.SetStateAction<string>>

т.е.

decoded: Token | React.Dispatch<React.SetStateAction<string>>, setToken: Token | React.Dispatch<React.SetStateAction<string>>

Что я делаю не так ...

1 Ответ

2 голосов
/ 17 июня 2019

Я получил ту же проблему на днях!

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

Например:

export function useToken(initial: string): [Token, React.Dispatch<React.SetStateAction<string>>] {
}

Это должно исправить ... Я думаю, что это ошибка машинописного текста, поэтому, вероятно, для этого нужно решить проблему.

...