我有这个用来返回的函数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
}
但不幸的是,我似乎无法部分摆脱这一点undefined
。User | undefined
在// 1
中user
仍被视为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
}
在这里,我还没有开始更改User
,UserResponseDto
并且在// 2
VS Code 中将用户视为User
. 不是User | undefined
我想要的第一个函数。