【问题标题】:typescript jsonwebtoken jwt.verify promise return object is not assignable to interfacetypescript jsonwebtoken jwt.verify 承诺返回对象不可分配给接口
【发布时间】:2021-02-12 01:30:16
【问题描述】:

我对 Typescript 很陌生,我不确定使用什么正确的语法。

我正在使用承诺从 jwt.verify - jsonwebtoken 返回解码后的内容。它按预期工作,并返回一个包含 user.id、iat 和到期时间的对象,但 resolve promise 上出现以下类型错误。

“'object'类型的参数不能分配给'IVerifiedUserType | PromiseLike | undefined'类型的参数。”

下面是我返回的接口和代码。我在承诺上使用异步等待。

export interface IVerifiedUserType {
  id: number;
  iat: number;
  exp: number;
}

const verifyToken = (token: string, config: IConfigType): Promise<IVerifiedUserType> =>
      new Promise((resolve, reject) => {
        if (config.secrets.jwt) {
          jwt.verify(token, config.secrets.jwt, (err, decoded) => {
            if (err) {
              return reject(err);
            }
            if (typeof decoded === "object") {
              resolve(decoded);
            }
          });
        }
      });

const verifiedToken = await authService.verifyToken(token, config);

我使用“jsonwebtoken”:“^8.5.1”和“@types/jsonwebtoken”:“^8.3.3”,用于类型。

【问题讨论】:

    标签: typescript promise async-await jwt


    【解决方案1】:

    我相信打字稿不知道解码令牌的类型在你的情况下decoded,所以你需要转换它

    您可以通过将其转换为 any 来消除错误,但在这种情况下,您将失去类型检查。

    resolve(decoded as any)
    

    但更好的解决方案是resolve(decoded as VerifiedUserType)

    你可以省略 if (typeof decoded === "object")

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2017-11-28
      • 2017-12-21
      • 2018-02-15
      • 1970-01-01
      • 2015-06-27
      • 2014-10-05
      • 1970-01-01
      • 2016-03-23
      相关资源
      最近更新 更多