Javascript 承诺Typescript中的函数;类型void不可分配…“;
我刚刚开始使用Typescript。如果不欺骗Typescript系统并使用Javascript 承诺Typescript中的函数;类型void不可分配…“;,javascript,typescript,promise,Javascript,Typescript,Promise,我刚刚开始使用Typescript。如果不欺骗Typescript系统并使用anytype,我似乎无法解决以下一个问题: 我有一个函数返回一个承诺: saveExpirableToken(tokenField: string, tokenExpiresField: string, tokenExpiresAt: Date) { return new Promise<UserDocument>((resolve, reject) => { this.gen
any
type,我似乎无法解决以下一个问题:
我有一个函数返回一个承诺:
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())
})
})
},
我得到的Typescript错误是:类型“void”不能分配给类型“UserDocument”
我的函数声明缺少什么?我如何用Typescript处理承诺,这样我就可以告诉Typescript,winningUser
实际上是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'))
})
},
generateResetToken(回调:(err:Error | null,token?:string)=>Promise){
常数byteSize=16
crypto.randomBytes(字节大小,(err,resetToken)=>{
if(err){callback(err)}
回调(null,resetToken.toString('hex'))
})
},
请查看this.save()
方法的类型定义,它似乎不返回UserDocument
,而是返回void
我创建了一个游乐场链接,它表明您的其他类型定义工作正常:这似乎是正确的。他们应该调用
this.save()
(如果是async
),然后使用this
进行解析。我专门使用MongoDB和Mongoose。基于这些文档,document.save()
应该返回一个承诺,该承诺将解析为已保存的文档:。我认为我的问题在于generateResetToken
的工作方式。我尝试将typescript(请参见编辑)添加到函数中,以表示它将收到一个回调,该回调是一个将向用户文档返回承诺的函数。看起来错误来自generateResetToken
的类型定义。回调应不返回任何内容,因此您可能希望将generateResetToken
的返回类型更改为void
。再次确认一下,错误指向哪一行?随机用户的类型是什么?能否提供save
方法的代码this.save()
意味着调用对象的save
方法(我猜最终会调用Mongoose提供的save
)
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'))
})
},