我有这个用来返回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
是一个在构造函数user: User
中接受1个参数并扩展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代码将用户视为User
。不是User | undefined
,这正是我想要的第一个函数。
答案 0 :(得分:0)
userService.getOne可能是你的问题。以下是一些常见问题:
基本上,检查userService.getOne()以查看它的返回类型(可能是明确声明它),那么你应该好好去。