什么是 SAP Spartacus 里的 module augmentation
  I7JaHrFMuDsU 2024年08月09日 33 0

在 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 的属性。

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月09日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年08月09日   56   0   0 javascript前端
I7JaHrFMuDsU