1

我创建了Product. 这很好,但我有一个关于使用自定义扩展类型的Product服务的问题。

例如,我的自定义 OCC 产品模型和CustomProductUI 模型有额外的字段(例如字符串字段)。我扩展了Occ.ProductProduct接口。但是,例如在ProductSummaryComponent财产product$中没有我的领域。我的建议是它有product$: Observable<Product> = this.currentProductService.getProduct();- ProductUI 模型。

问题:

我想在CustomProduct任何地方使用我的自定义 UI 模型而不是 Spartacus 的 OOTB 产品 UI 模型,对于 OOTB SpartacusOcc.Product模型也是如此。文档仅描述了如何创建自定义 UI 模型并在Normalizer. 但是,如果我需要在任何地方(服务、适配器、转换器等)通过自定义替换 OOTBProduct或UI 模型怎么办?Occ.Product

4

1 回答 1

0

目前只有一种解决方法可用,因为模型在库中是硬编码的,并且模型不会作为库根目录中的符号导出。我们已经在这个主题上工作了几次,请参阅https://github.com/SAP/cloud-commerce-spartacus-storefront/issues/1217,但尚未最终确定。

解决方法是创建自己的模型,并在需要类型安全的地方引用它。

import { Product as CxProduct  } from '@spartacus/core';

interface Product extends CxProduct {
  magic?: string;
}

您可以从应用程序的中心位置导入自定义产品模型。

如果您需要从 spartacus 库对产品进行操作,您可能需要显式传入类型,即:

this.currentProductService.getProduct().pipe(map((p:Product) => p.magic));

我们将继续努力,但就目前而言,恐怕这是你能用的最好的了。

请注意,类型安全不会影响实际的数据加载。这些接口仅在开发过程中使用,不会在运行时使用。一旦 typescript 转换为 javascript,从后端加载的数据将最终存储在 ngrx 存储中,并且可以被观察到。

于 2020-03-16T10:24:02.783 回答