zl程序教程

您现在的位置是:首页 >  其他

当前栏目

什么是 SAP Spartacus 里的 module augmentation

SAP 什么 module Spartacus
2023-09-14 09:04:00 时间

在 spartacus 中,我们公开了相当多的接受配置的方法。到目前为止,我们在输入这些方法方面做得并不好。您可能会注意到,通常当我们提供配置时,我们使用类型断言(例如 provideConfig({i18n: {…}}))来提高类型安全性和自动完成功能。

在 4.0 版中,我们改变了使用 Config 的方式。由于模块增强 TS 功能,现在每个功能都对这个界面做出了贡献。由于该 Config 现在正确描述了您可以传递给 spartacus 的所有配置选项。

更改后,我们可以将所有接受配置的方法的类型从 any 更改为 Config。您不再需要使用类型断言来受益于更好的类型安全和 DX。

我们仍然保留单独的配置(例如 I18nConfig、AsmConfig、AuthConfig 等),但所有这些接口也有助于 Config 接口。

当您需要访问配置对象时,您仍然可以在构造函数中使用以下语法:protected config: AsmConfig(这只会提示您 AsmConfig 属性),但您现在可以选择使用 protected config: Config.当您想要访问具有类型安全性的完整配置(例如同时使用 FeatureConfig 和 MediaConfig)时,建议使用后者。

对于大多数用户来说,此更改应该是透明的,但如果您的应用程序中有自定义配置,则会影响您。

让我们在一个具有特殊主题配置的示例中展示它:

// existing code
@Injectable({
  providedIn: 'root',
  useExisting: Config,
})
export abstract class ThemeConfig {
  theme?: {
    dark?: boolean;
  };
}

// required changes

// You need to augment `Config` interface from `@spartacus/core` to be able to provide this config with `provideConfig` method
declare module '@spartacus/core' {
  interface Config extends ThemeConfig {}
}

您不需要在使用此配置的地方更改任何内容,但是在您声明自定义配置的地方,您必须指示 Typescript Config 接口也具有带有深色选项的主题属性。 如果没有它,Typescript 会抱怨您尝试传递不属于 Config 的属性。

我们仍然建议将顶级配置属性设为可选,这样您就可以在多个块中而不是在一个地方传递配置。