diff --git a/CHANGELOG.md b/CHANGELOG.md index 54a678accb..278de46650 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Svelte changelog +## Unreleased + +* Add `SvelteComponentConstructor` convenience type ([#6770](https://github.com/sveltejs/svelte/pull/6770)) + ## 3.43.0 * Use export map to expose no-op versions of lifecycle functions for SSR ([#6743](https://github.com/sveltejs/svelte/pull/6743)) diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 8e12f9f0ee..31d77d15ac 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -12,5 +12,6 @@ export { tick, createEventDispatcher, SvelteComponentDev as SvelteComponent, - SvelteComponentTyped + SvelteComponentTyped, + SvelteComponentConstructor } from 'svelte/internal'; diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 76d68086c8..3590a9a7cd 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -247,6 +247,22 @@ export class SvelteComponentTyped< } } +/** + * Convenience-type to represent a Svelte component constructor. + * + * Example: + * ```ts + import ASvelteComponent from './ASvelteComponent.svelte'; + const ComponentClass: SvelteComponentConstructor = ASvelteComponent; + new ComponentClass(..); + ``` + */ +export type SvelteComponentConstructor< + Props extends Record = any, + Events extends Record = any, + Slots extends Record = any +> = new (options: IComponentOptions) => SvelteComponentTyped; + export function loop_guard(timeout) { const start = Date.now(); return () => {