首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么TS认为`setValue`可能是一个‘boolean`?

为什么TS认为`setValue`可能是一个‘boolean`?
EN

Stack Overflow用户
提问于 2021-02-24 13:28:54
回答 1查看 31关注 0票数 0

为什么TS认为setOpen 可能是一个boolean??

代码语言:javascript
运行
复制
import { useState } from 'react'

export default function useLocalStorage (key: string, initialValue: T) {
  const [storedValue, setStoredValue] = useState(() => {
    try {
      const item = window.localStorage.getItem(key)
      return item ? JSON.parse(item) : initialValue
    } catch (error) {
      console.log(error)
      return initialValue
    }
  })

  const setValue = (value: T) => {
    try {
      setStoredValue(value)
      window.localStorage.setItem(key, JSON.stringify(value))
    } catch (error) {
      console.log(error)
    }
  }

  return [storedValue, setValue]
}

const [open, setOpen] = useLocalStorage('someKey', false)
console.log(open);
setOpen(true) // setOpen: boolean | (value: boolean) => void
EN

Stack Overflow用户

回答已采纳

发布于 2021-02-24 13:50:33

因为您没有声明useLocalStorage默认情况下,它会推断出联合类型的数组,即(boolean | (value: boolean) => void)[]而不是元组[boolean, (value: boolean) => void]...。

声明函数的返回类型:

代码语言:javascript
运行
复制
export default function useLocalStorage (key: string, initialValue: T): [boolean, (value: boolean) => void] {
  ...

不过,您的代码还有另一个不太明显的问题,那就是setValue没有正确记录。useReducer()会更适合这样做:

代码语言:javascript
运行
复制
export default function useLocalStorage (key: string, initialValue: T) {
  return useReducer((prev: T, next: T) => {
    try {
      window.localStorage.setItem(key, JSON.stringify(next))
      return next
    } catch (error) {
      console.log(error)
      return prev
    }
  }, initialValue, () => {
    try {
      const item = window.localStorage.getItem(key)
      return item === null ? initialValue : JSON.parse(item)
    } catch (error) {
      console.log(error)
      return initialValue
    }
  })
}
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66345177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档