在 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 的屬性。
我們仍然建議将頂級配置屬性設為可選,這樣您就可以在多個塊中而不是在一個地方傳遞配置。