打字稿:类型 'Promise<void>' 不可分配给类型 'void | Destructor'
Typescript: Type 'Promise<void>' is not assignable to type 'void | Destructor'
编辑正在展示
Type 'Promise' is not assignable to type 'void | Destructor'.
用于 useEffect 中的 checkUserLoggedIn() 调用。
我可以通过执行 const checkUserLoggedIn:any
来摆脱它
然而,也许这不是解决这个问题的最理想方法...
如果我做 const checkUserLoggedIn:Promise
然后我得到一个不同的错误:
This expression is not callable. Type 'Promise' has no call
signatures.
这不是我想要的...我希望它是可调用的...我正在 translating/converting 我的 javascript 文件到 typescript.....
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)
}
}
以您隐式描述的方式编写的箭头函数 return 函数的值。例如,此函数 () => 4
return 的值 4
。相反,当您将其包装在一个块中时,您必须显式定义 return 值:() => { 4; }
此函数不 return 任何东西。
在你的例子中,你正在传递一个匿名箭头函数,它隐含地 return 是一个异步函数的结果,这是一个承诺。
要解决此问题,请将传递给 useEffect
的函数的内容包装在一个块中:
useEffect(() => {
checkUserLoggedIn();
}, []);
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)
}
}
编辑正在展示
Type 'Promise' is not assignable to type 'void | Destructor'.
用于 useEffect 中的 checkUserLoggedIn() 调用。
我可以通过执行 const checkUserLoggedIn:any
来摆脱它然而,也许这不是解决这个问题的最理想方法...
如果我做 const checkUserLoggedIn:Promise 然后我得到一个不同的错误:
This expression is not callable. Type 'Promise' has no call signatures.
这不是我想要的...我希望它是可调用的...我正在 translating/converting 我的 javascript 文件到 typescript.....
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)
}
}
以您隐式描述的方式编写的箭头函数 return 函数的值。例如,此函数 () => 4
return 的值 4
。相反,当您将其包装在一个块中时,您必须显式定义 return 值:() => { 4; }
此函数不 return 任何东西。
在你的例子中,你正在传递一个匿名箭头函数,它隐含地 return 是一个异步函数的结果,这是一个承诺。
要解决此问题,请将传递给 useEffect
的函数的内容包装在一个块中:
useEffect(() => {
checkUserLoggedIn();
}, []);
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)
}
}