首页 > 解决方案 > Typescript 中的 Promise 函数“类型 void 不可分配……”

问题描述

我刚刚开始使用 Typescript。如果不欺骗 Typescript 系统并使用 type,我似乎无法解决的一个问题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
    )

我得到的打字稿错误是: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'))
    })
  },

标签: javascripttypescriptpromise

解决方案


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

我创建了一个游乐场链接,它表明您的其他类型定义工作正常:链接


推荐阅读