diff --git a/packages/next/shared/lib/dynamic.tsx b/packages/next/shared/lib/dynamic.tsx index 8c1f5b3df916..bf5bb6ee6245 100644 --- a/packages/next/shared/lib/dynamic.tsx +++ b/packages/next/shared/lib/dynamic.tsx @@ -33,17 +33,18 @@ export type LoadableBaseOptions
= LoadableGeneratedOptions & { ssr?: boolean } -export type LoadableSuspenseOptions
= { - loader: Loader
+export type LoadableSuspenseOptions = { suspense?: boolean } export type LoadableOptions
= LoadableBaseOptions
-export type DynamicOptions
= LoadableBaseOptions
+export type DynamicOptions
= + | LoadableBaseOptions
+ | LoadableSuspenseOptions export type LoadableFn
= ( - opts: LoadableOptions
| LoadableSuspenseOptions
+ opts: LoadableOptions
| LoadableSuspenseOptions ) => React.ComponentType
export type LoadableComponent
= React.ComponentType
@@ -113,7 +114,9 @@ export default function dynamic
( // Support for passing options, eg: dynamic(import('../hello-world'), {loading: () =>
Loading something
}) loadableOptions = { ...loadableOptions, ...options } - const suspenseOptions = loadableOptions as LoadableSuspenseOptions+ const suspenseOptions = loadableOptions as LoadableSuspenseOptions & { + loader: Loader
+ } if (!process.env.__NEXT_CONCURRENT_FEATURES) { // Error if react root is not enabled and `suspense` option is set to true if (!process.env.__NEXT_REACT_ROOT && suspenseOptions.suspense) { diff --git a/test/integration/react-18/app/components/ts-foo.tsx b/test/integration/react-18/app/components/ts-foo.tsx new file mode 100644 index 000000000000..f29172cb4aa5 --- /dev/null +++ b/test/integration/react-18/app/components/ts-foo.tsx @@ -0,0 +1,3 @@ +export default function TsFoo() { + return