预期有1个参数,但有0个

时间:2020-07-18 06:53:49

标签: typescript

我使用TypeScript在react中创建了自定义钩子,但是出现以下错误,对此我一无所知:

const getMode: (mode: any) => any
Expected 1 arguments, but got 0.ts(2554)
DarkModeStatus.tsx(2, 20): An argument for 'mode' was not provided.

我在这里使用的方法(func)没有得到任何参数,当我调用getMode()时,得到了以上消息。

这是我的自定义钩子代码:

export const useDarkModeStatus = () => {
  const setMode = (mode): void => {
    console.log(mode, " setMode")
    typeof window !== "undefined" &&
      window.localStorage.setItem("theme", JSON.stringify(mode))
  }

  const getMode = () =>
    typeof window !== "undefined" &&
    JSON.parse(window.localStorage.getItem("theme"))
  return [getMode, setMode]
}

我已经调用了我的函数:

import { useDarkModeStatus } from "../components/DarkModeStatus/DarkModeStatus"
 const [getMode] = useDarkModeStatus()
 useEffect(() => {
    const value = getMode()
    dispatch({ type: "INITIAL_MODE", value })
  }, [])

当我将参数传递给getMode('yes')时,即使我没有收到任何参数,错误也得以解决,谢谢!

1 个答案:

答案 0 :(得分:2)

编译器试图推断类型不是太宽,也不是为了适合所有成员而变窄。

使用您提供的详细信息(根本没有),返回结果的推断类型将是:

(() => any | (any) => void)[]

鉴于此函数返回的值的第一项是() => any | (any) => void。没有参数就无法调用。

要解决此问题,您必须显式声明useDarkModeStatus的返回类型,或放置as const

return [getMode, setMode] as const;

TS会使用尽可能特殊的类型:由2个元素组成的元组,每个项目都应具有尽可能特定的类型。