【问题标题】:Enforcing return values with Typescript使用 Typescript 强制返回值
【发布时间】:2021-02-27 07:47:50
【问题描述】:

我有一个类,它有两种生成和解码jsonwebtokens 的方法。这就是类的样子。

interface IVerified {
  id: string
  email?: string
  data?: any
}

export default class TokenProvider implements ITokenProvider {
  public async generateToken({ id, email }: ITokenDetails): Promise<string> {
    return sign({ id, email }, CONFIG.JWT.secret, {
      subject: id,
      expiresIn: CONFIG.JWT.expires,
    })
  }
  

  public async decodeToken(token: string): Promise<IVerified> {
    const user = verify(token, CONFIG.JWT.secret)
    return user as IVerified
  }
}

decodeToken 方法中,正如您从上面所见,它接受一个令牌,旨在返回嵌入在令牌中的解码值。但是 vscode Intellisense 显示jwt.verify() 方法返回一个string | object。如何覆盖它以强制该方法返回一些用户属性?我不想得到string | object,而是想返回上面提到的IVerified 接口描述的属性。任何帮助表示赞赏!非常感谢。

【问题讨论】:

  • 您是否在某处实现interface?尝试将其转换为Type

标签: javascript node.js typescript express


【解决方案1】:

您通常有两种选择:

  1. 将结果强制转换为IVerified,就像你在那里做的那样(你可能必须做return (user as any) as IVerified;才能让打字稿做你想做的事。只要你能保证objectjwt.verify 遵循 IVerified 接口。

  2. 创建一个辅助函数,接收 string | object 并执行必要的逻辑来执行运行时验证、反序列化等,以确保您获得 IVerified 回复:

private function validateDecodedToken(input: string | object): IVerified {
  // ... do whatever you need to parse/deserialize/validate/etc here
}

public async decodeToken(token: string): Promise<IVerified> {
  const user = verify(token, CONFIG.JWT.secret);
  return this.validateDecodedToken(user);
}

这是更“健壮”的方法,但如果有的话可能会有点过头了 是系统中的其他保证。

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 2021-08-04
    • 2021-10-30
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多