首页 > 解决方案 > 输入'字符串 | null' 不能分配给我的枚举

问题描述

在我的 ProductGender 枚举中-

enum ProductGender {
    Men,
    Women,
}

我的 getProducts 服务 -

  public getProducts(
    gender: ProductGender,
    category: ProductCategory
  ): Observable<IProductInterface[]> {
    return this.httpProductService.getProducts(gender, category).pipe(
      catchError((errorResponse: HttpErrorResponse) => {
        let errorMessage: string;

        switch (errorResponse.status) {
          case 400:
            errorMessage = 'Getting products failed';
            break;
          default:
            errorMessage = 'An error occurred';
        }

        return throwError(errorMessage);
      }),
      map((response: IGetProductsResponse) => response.data!)
    );
  }

我的产品解析器 -

class ProductsResolver
  implements
    Resolve<
      Pick<IProductInterface, 'image' | 'title' | 'price' | 'description'>[]
    >
{
  constructor(private productService: ProductService) {}

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Pick<
  IProductInterface, 'image' | 'title' | 'price' | 'description'>[]
  > {
    return this.productService.getProducts(
      route.paramMap.get('gender'), - error is here
      route.paramMap.get('category')
    );
  }
}

我得到了错误 - route.paramMap.get('gender') 我想知道我怎样才能将它作为枚举类型。谢谢!

标签: angulartypescriptangular-resolver

解决方案


2个问题:

  • 如果你没有指定你的枚举值等于什么(即Men = 'Men'),那么它们被分配了数字。你可以parseInt使用你的参数,但无论如何你都应该验证它是一个正确的枚举值。
  • 即使您的枚举值映射到字符串,您也不能分配给string | nullstring因为该值可以nullnull不能分配给string. 如果参数丢失,route.paramMap.get('gender') 可以返回。null无论如何,您应该验证这一点。

对于第二个问题,如果您 100% 确定该参数将存在,请使用route.paramMap.get('gender')!. 告诉 TypeScript “!我确定这不是nullundefined”。


推荐阅读