type ComposedProvider = Component; type FlexibleProvider = Component | Component; type ProviderConfig = | [FlexibleProvider] | [FlexibleProviderWithProps>, Record]; type FlexibleProviderWithProps> = | Component | Component>; export function buildProvidersTree>( providers: TProviders, ): ComposedProvider { return providers.reduce( (AccumulatedProviders, providerConfig) => { const [Provider, props = {}] = providerConfig; return ({ children }) => ( {children} ); }, ({ children }) => children, ); }