我使用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')
时,即使我没有收到任何参数,错误也得以解决,谢谢!
答案 0 :(得分:2)
编译器试图推断类型不是太宽,也不是为了适合所有成员而变窄。
使用您提供的详细信息(根本没有),返回结果的推断类型将是:
(() => any | (any) => void)[]
鉴于此函数返回的值的第一项是() => any | (any) => void
。没有参数就无法调用。
要解决此问题,您必须显式声明useDarkModeStatus
的返回类型,或放置as const
:
return [getMode, setMode] as const;
TS会使用尽可能特殊的类型:由2个元素组成的元组,每个项目都应具有尽可能特定的类型。