0

我有这个用来返回的函数UserResponseDto | undefined。现在我想重构它,所以我会回来UserResponseDto | NotFoundDto。函数this.userService.findOne()正在返回Promise<User | undefined>

目前我有这个:

async findOne (@Param() params): Promise<UserResponseDto | undefined> {
  return this.userService.findOne(params.id)
}

我想要这样的东西:

async findOne (@Param() params): Promise<UserResponseDto | NotFoundResponseDto> {
  const user = await this.userService.findOne(params.id)
  if (typeof user === "undefined") {
    return new NotFoundResponseDto()
  }

  return new UserResponseDto(user) // 1
}

但不幸的是,我似乎无法部分摆脱这一点undefinedUser | undefined// 1user仍被视为User | undefined。我应该使用user as User吗?我觉得这是一个令人讨厌的解决方法。

我错过了什么吗?如果没有大量的样板代码,它可以更容易完成吗?


UserResponseDto是一个在构造函数中接受 1 个参数user: User并扩展的类SingleResponse<User>


这是我正在使用的另一个功能,它与这个非常相似:

async update (@Param() params, @Body() dto: UpdateUserRequestDto): Promise<User | undefined> {
  const user = await this.userService.update(params.id, dto)
  if (typeof user === 'undefined') {
    return undefined
  }

  return this.userService.findOne(user.id) // 2
}

在这里,我还没有开始更改UserUserResponseDto并且在// 2VS Code 中将用户视为User. 不是User | undefined我想要的第一个函数。

4

1 回答 1

0

userService.getOne 可能是您的问题。以下是一些常见问题:

  1. 如果 getOne() 抛出错误,并且未被捕获, findOne 将返回 undefined。
  2. 如果 getOne() 可能返回未定义,则 findOne 可能返回未定义。

基本上,检查 userService.getOne() 以查看它的返回类型(可能显式声明它),那么你应该很高兴。

于 2017-12-28T14:38:20.363 回答