angular - 输入'字符串 | 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')
我想知道我怎样才能将它作为枚举类型。谢谢!
解决方案
2个问题:
- 如果你没有指定你的枚举值等于什么(即
Men = 'Men'
),那么它们被分配了数字。你可以parseInt
使用你的参数,但无论如何你都应该验证它是一个正确的枚举值。 - 即使您的枚举值映射到字符串,您也不能分配给
string | null
,string
因为该值可以null
且null
不能分配给string
. 如果参数丢失,route.paramMap.get('gender')
可以返回。null
无论如何,您应该验证这一点。
对于第二个问题,如果您 100% 确定该参数将存在,请使用route.paramMap.get('gender')!
. 告诉 TypeScript “!
我确定这不是null
或undefined
”。
推荐阅读
- java - 从 URL 流媒体播放器然后传递到另一个活动
- javascript - 我应该如何使用 reactjs 将特定矩形添加到现有图像?
- java - 我想从数据库中获取数据并用数组检查它,但它不起作用
- reactjs - 使用 jest 和酶测试 useEffect 和 useState
- magento2 - 如何在 Magento 2.3.2 的结帐过程中禁用或跳过付款方式步骤
- html - 为什么我的滑块堆叠在一起?新到滑块
- php - 如何使用 PHP7 从静态方法调用 trait 的非静态方法?
- javascript - 在弹出图像上显示文本
- java - Jboss 7.1 中的 com.fasterxml.jackson.databind.JsonMappingException
- r - 将列表拆分为R中的单独数据框