0

我正在使用该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 块返回什么?

4

1 回答 1

1

如果你想重新抛出,你可以抛出任何你想要的,因为通常被拒绝的值没有正确输入(即 is 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在失败的情况下返回。

于 2019-03-05T10:39:37.383 回答