打字稿"type void is not assignable ..."中的承诺函数



我刚刚开始使用Typescript。如果不欺骗Typescript系统并使用any类型,我似乎无法解决以下问题:

我有一个返回承诺的函数:

saveExpirableToken(tokenField: string, tokenExpiresField: string, tokenExpiresAt: Date) {
return new Promise<UserDocument>((resolve, reject) => {
this.generateResetToken((err: Error, resetToken: string) => {
if (err) { reject(err) }
this[tokenField] = resetToken
this[tokenExpiresField] = tokenExpiresAt
resolve(this.save())
})
})
},

我在别处调用下面的

let winningUser: UserDocument = await randomUser.saveExpirableToken(
'wonEverythingToken',
'wonEverythingTokenExpires',
moment().add(1, 'year').toDate() // add one year as expiration to claiming prize
)
我得到的Typescript错误是:Type 'void' is not assignable to type 'UserDocument'

我在函数声明中遗漏了什么?我怎样用Typescript处理promise才能告诉TypescriptwinningUser实际上是UserDocument

类型**编辑

generateResetToken(callback: (err: Error | null, token?: string) => Promise<UserDocument>) {
const byteSize = 16
crypto.randomBytes(byteSize, (err, resetToken) => {
if (err) { callback(err) }
callback(null, resetToken.toString('hex'))
})
},

请查看this.save()方法的类型定义,它似乎不返回UserDocument,而是返回void

我已经创建了一个playground链接,它显示您的其他类型定义工作正常:link

相关内容

最新更新