编辑正在显示
类型‘允诺’不能被分配到键入'void \ Destructor‘。
对于checkUserLoggedIn()调用useEffect。
我可以通过执行checkUserLoggedIn:any来摆脱它
不过,也许这不是解决这件事的最理想的方法.
如果我做了checkUserLoggedIn:error,那么我会得到一个不同的错误:
此表达式不可调用。输入“承诺”没有呼叫签名。
这不是我想要的.我希望它是可调用的.我正在将我的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)
}
}发布于 2022-05-13 18:58:25
用您所描述的方式编写的箭头函数隐式地返回函数的值。例如,这个函数() => 4返回值4。相反,当您将其包装在块中时,必须显式定义返回值:() => { 4; }此函数不返回任何内容。
在您的示例中,您传递的是一个匿名箭头函数,该函数隐式返回异步函数的结果,这是一个承诺。
要解决这个问题,请将传递给useEffect的函数的内容封装在一个块中:
useEffect(() => {
checkUserLoggedIn();
}, []);发布于 2022-05-14 13:27:21
useEffect(() => {
checkUserLoggedIn()
}, [])
// Check if user is logged in
const checkUserLoggedIn:() => Promise<void> = 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)
}
}https://stackoverflow.com/questions/72234152
复制相似问题