import * as React from "react"; import { LoadableComponent, CommonOptions as LoadableOptions, LoadingComponentProps as LoadableLoadingComponentProps } from "react-loadable"; type Omit = Pick>; type AsyncComponent

= Promise | { default: React.ComponentType

}>; type AsyncComponentLoader

= () => AsyncComponent

; type DynamicComponent

= React.ComponentType

& LoadableComponent; // Base dynamic loader options (essential Loadable config required by `next/dynamic`) interface NextDynamicOptionsBase extends Omit { loading?: LoadableOptions["loading"]; // optional ssr?: boolean; loadableGenerated?: { webpack?: any; modules?: any; }; } // Dynamic loader options with `loader` key. interface NextDynamicLoaderOptions

extends NextDynamicOptionsBase { loader?: AsyncComponentLoader

; } // Dynamic loader options for mapped modules. interface NextModuleMapOptions

extends NextDynamicOptionsBase { modules: () => { [P in keyof E]: AsyncComponentLoader }; render: (props: P, loaded: { [P in keyof E]: DynamicComponent }) => React.ReactNode; } /** * Overloaded dynamic function. * https://github.com/zeit/next.js/blob/v8.0.4/packages/next-server/lib/dynamic.js#L24 */ // tslint:disable:no-unnecessary-generics declare function dynamic< P extends {}, E extends { [key: string]: any } >(options: NextModuleMapOptions): DynamicComponent

; declare function dynamic

( options: NextDynamicLoaderOptions

): DynamicComponent

; declare function dynamic

( asyncModule: AsyncComponentLoader

| AsyncComponent

, options: NextDynamicOptionsBase ): DynamicComponent

; declare function dynamic

( asyncModuleOrOptions: AsyncComponentLoader

| AsyncComponent

| NextDynamicOptionsBase, options?: any ): DynamicComponent

; // tslint:enable:no-unnecessary-generics export type LoadingComponentProps = LoadableLoadingComponentProps; export default dynamic;