我正在使用inversify-express-utils
软件包。
假设我有一个控制器操作返回一个User
实体:
@httpGet("/:id")
public async getUser(): Promise<User> {
try {
const id = this.httpContext.request.params.id;
return await this._userRepository.get(id);
}
catch (e) {
this.httpContext.response.status(404);
// ...what goes here?
}
}
我知道我可以省略返回类型,但是我不想绕过类型系统。
那我该从catch块返回什么?
答案 0 :(得分:1)
如果要重新抛出,则可以抛出任何内容,因为通常拒绝类型不正确(即any
)。
lib.es5.d.ts:
interface Promise<T> {
then<TResult1 = T, TResult2 = never>(
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
// See `reason` below
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null
): Promise<TResult1 | TResult2>;
有人可能会说Promise
应该有两个泛型类型参数...
如果您确实捕获并返回了一个值,则它必须是指示的User
对象。击中404听起来对我来说更像是拒绝,但我对那个库不熟悉,因此如果它不能正确处理拒绝,您可能必须返回一个值。
如果您不能拒绝,最好将返回类型更改为User | null
,然后在失败的情况下可以返回null
。