Typescript:类型“Promise<void>”不可分配给类型“void |” 析构函数'

pre*_*ton 8 javascript promise typescript typescript-generics react-typescript

编辑器正在显示

类型“Promise”不可分配给类型“void |” 析构函数'。

对于 useEffect 中的 checkUserLoggedIn() 调用。

我可以通过执行 const checkUserLoggedIn:any 来摆脱它

然而也许这不是解决这个问题的最理想的方法......

如果我执行 const checkUserLoggedIn:Promise ,则会收到不同的错误:

该表达式不可调用。类型“Promise”没有呼叫签名。

这不是我想要的...我希望它是可调用的...我正在将我的 javascript 文件翻译/转换为打字稿......

useEffect(() => checkUserLoggedIn(), [])

    // Check if user is logged in
    const checkUserLoggedIn = async () => {
        console.log('checkUserLoggedIn')

        const res = await fetch(`${NEXT_URL}/api/user`)
        const data = await res.json()

        if (res.ok) {
            setUser(data.user)

            console.log('data.user', data.user)
            router.push('/account/dashboard')
        } else {
            setUser(null)
        }
    }
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 15

以您所描述的方式编写的箭头函数隐式返回函数的值。例如,此函数() => 4返回值4。相反,当您将其包装在块中时,您必须显式定义返回值:() => { 4; }此函数不返回任何内容。

在您的情况下,您正在传递一个匿名箭头函数,该函数隐式返回异步函数的结果,这是一个承诺。

要解决此问题,请将传递给的函数的内容包装useEffect在块中:

useEffect(() => {
  checkUserLoggedIn();
}, []);
Run Code Online (Sandbox Code Playgroud)