```js
// @noErrors
import {
SvelteComponent,
SvelteComponentTyped,
afterUpdate,
beforeUpdate,
createEventDispatcher,
createRawSnippet,
flushSync,
getAllContexts,
getContext,
hasContext,
hydrate,
mount,
onDestroy,
onMount,
setContext,
tick,
unmount,
untrack
} from 'svelte';
```
## SvelteComponent
This was the base class for Svelte components in Svelte 4. Svelte 5+ components
are completely different under the hood. For typing, use `Component` instead.
To instantiate components, use `mount` instead.
See [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.
```dts
class SvelteComponent<
Props extends Record
= Record,
Events extends Record = any,
Slots extends Record = any
> {/*…*/}
```
```dts
static element?: typeof HTMLElement;
```
The custom element version of the component. Only present if compiled with the `customElement` compiler option
```dts
[prop: string]: any;
```
```dts
constructor(options: ComponentConstructorOptions
>);
```
- deprecated This constructor only exists when using the `asClassComponent` compatibility helper, which
is a stop-gap solution. Migrate towards using `mount` instead. See
[migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.
```dts
$destroy(): void;
```
- deprecated This method only exists when using one of the legacy compatibility helpers, which
is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
for more info.
```dts
$on
>(
type: K,
callback: (e: Events[K]) => void
): () => void;
```
- deprecated This method only exists when using one of the legacy compatibility helpers, which
is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
for more info.
```dts
$set(props: Partial
): void;
```
- deprecated This method only exists when using one of the legacy compatibility helpers, which
is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
for more info.
## SvelteComponentTyped
Use `Component` instead. See [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.
```dts
class SvelteComponentTyped<
Props extends Record
= Record,
Events extends Record = any,
Slots extends Record = any
> extends SvelteComponent {}
```
## afterUpdate
Use [`$effect`](/docs/svelte/$effect) instead
Schedules a callback to run immediately after the component has been updated.
The first time the callback runs will be after the initial `onMount`.
In runes mode use `$effect` instead.
```dts
function afterUpdate(fn: () => void): void;
```
## beforeUpdate
Use [`$effect.pre`](/docs/svelte/$effect#$effect.pre) instead
Schedules a callback to run immediately before the component is updated after any state change.
The first time the callback runs will be before the initial `onMount`.
In runes mode use `$effect.pre` instead.
```dts
function beforeUpdate(fn: () => void): void;
```
## createEventDispatcher
Use callback props and/or the `$host()` rune instead — see [migration guide](/docs/svelte/v5-migration-guide#Event-changes-Component-events)
Creates an event dispatcher that can be used to dispatch [component events](/docs/svelte/legacy-on#Component-events).
Event dispatchers are functions that can take two arguments: `name` and `detail`.
Component events created with `createEventDispatcher` create a
[CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).
These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).
The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)
property and can contain any type of data.
The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:
```ts
const dispatch = createEventDispatcher<{
loaded: null; // does not take a detail argument
change: string; // takes a detail argument of type string, which is required
optional: number | null; // takes an optional detail argument of type number
}>();
```
```dts
function createEventDispatcher<
EventMap extends Record = any
>(): EventDispatcher;
```
## createRawSnippet
Create a snippet programmatically
```dts
function createRawSnippet
(
fn: (...params: Getters) => {
render: () => string;
setup?: (element: Element) => void | (() => void);
}
): Snippet;
```
## flushSync
Synchronously flush any pending updates.
Returns void if no callback is provided, otherwise returns the result of calling the callback.
```dts
function flushSync(fn?: (() => T) | undefined): T;
```
## getAllContexts
Retrieves the whole context map that belongs to the closest parent component.
Must be called during component initialisation. Useful, for example, if you
programmatically create a component and want to pass the existing context to it.
```dts
function getAllContexts<
T extends Map
= Map
>(): T;
```
## getContext
Retrieves the context that belongs to the closest parent component with the specified `key`.
Must be called during component initialisation.
```dts
function getContext(key: any): T;
```
## hasContext
Checks whether a given `key` has been set in the context of a parent component.
Must be called during component initialisation.
```dts
function hasContext(key: any): boolean;
```
## hydrate
Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component
```dts
function hydrate<
Props extends Record
,
Exports extends Record
>(
component:
| ComponentType>
| Component,
options: {} extends Props
? {
target: Document | Element | ShadowRoot;
props?: Props;
events?: Record any>;
context?: Map;
intro?: boolean;
recover?: boolean;
}
: {
target: Document | Element | ShadowRoot;
props: Props;
events?: Record any>;
context?: Map;
intro?: boolean;
recover?: boolean;
}
): Exports;
```
## mount
Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.
Transitions will play during the initial render unless the `intro` option is set to `false`.
```dts
function mount<
Props extends Record
,
Exports extends Record
>(
component:
| ComponentType>
| Component,
options: MountOptions
): Exports;
```
## onDestroy
Schedules a callback to run immediately before the component is unmounted.
Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the
only one that runs inside a server-side component.
```dts
function onDestroy(fn: () => any): void;
```
## onMount
`onMount`, like [`$effect`](/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.
Unlike `$effect`, the provided function only runs once.
It must be called during the component's initialisation (but doesn't need to live _inside_ the component;
it can be called from an external module). If a function is returned _synchronously_ from `onMount`,
it will be called when the component is unmounted.
`onMount` functions do not run during [server-side rendering](/docs/svelte/svelte-server#render).
```dts
function onMount(
fn: () =>
| NotFunction
| Promise>
| (() => any)
): void;
```
## setContext
Associates an arbitrary `context` object with the current component and the specified `key`
and returns that object. The context is then available to children of the component
(including slotted content) with `getContext`.
Like lifecycle functions, this must be called during component initialisation.
```dts
function setContext(key: any, context: T): T;
```
## tick
Returns a promise that resolves once any pending state changes have been applied.
```dts
function tick(): Promise;
```
## unmount
Unmounts a component that was previously mounted using `mount` or `hydrate`.
Since 5.13.0, if `options.outro` is `true`, [transitions](/docs/svelte/transition) will play before the component is removed from the DOM.
Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).
```js
// @errors: 7031
import { mount, unmount } from 'svelte';
import App from './App.svelte';
const app = mount(App, { target: document.body });
// later...
unmount(app, { outro: true });
```
```dts
function unmount(
component: Record,
options?:
| {
outro?: boolean;
}
| undefined
): Promise;
```
## untrack
When used inside a [`$derived`](/docs/svelte/$derived) or [`$effect`](/docs/svelte/$effect),
any state read inside `fn` will not be treated as a dependency.
```ts
$effect(() => {
// this will run when `data` changes, but not when `time` changes
save(data, {
timestamp: untrack(() => time)
});
});
```
```dts
function untrack(fn: () => T): T;
```
## Component
Can be used to create strongly typed Svelte components.
#### Example:
You have component library on npm called `component-library`, from which
you export a component called `MyComponent`. For Svelte+TypeScript users,
you want to provide typings. Therefore you create a `index.d.ts`:
```ts
import type { Component } from 'svelte';
export declare const MyComponent: Component<{ foo: string }> {}
```
Typing this makes it possible for IDEs like VS Code with the Svelte extension
to provide intellisense and to use the component like this in a Svelte file
with TypeScript:
```svelte
```
```dts
interface Component<
Props extends Record
= {},
Exports extends Record = {},
Bindings extends keyof Props | '' = string
> {/*…*/}
```
```dts
(
this: void,
internals: ComponentInternals,
props: Props
): {
/**
* @deprecated This method only exists when using one of the legacy compatibility helpers, which
* is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
* for more info.
*/
$on?(type: string, callback: (e: any) => void): () => void;
/**
* @deprecated This method only exists when using one of the legacy compatibility helpers, which
* is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
* for more info.
*/
$set?(props: Partial
): void;
} & Exports;
```
- `internal` An internal object used by Svelte. Do not use or modify.
- `props` The props passed to the component.
```dts
element?: typeof HTMLElement;
```
The custom element version of the component. Only present if compiled with the `customElement` compiler option
## ComponentConstructorOptions
In Svelte 4, components are classes. In Svelte 5, they are functions.
Use `mount` instead to instantiate components.
See [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)
for more info.
```dts
interface ComponentConstructorOptions<
Props extends Record
= Record
> {/*…*/}
```
```dts
target: Element | Document | ShadowRoot;
```
```dts
anchor?: Element;
```
```dts
props?: Props;
```
```dts
context?: Map
;
```
```dts
hydrate?: boolean;
```
```dts
intro?: boolean;
```
```dts
recover?: boolean;
```
```dts
sync?: boolean;
```
```dts
idPrefix?: string;
```
```dts
$$inline?: boolean;
```
## ComponentEvents
The new `Component` type does not have a dedicated Events type. Use `ComponentProps` instead.
```dts
type ComponentEvents
=
Comp extends SvelteComponent
? Events
: never;
```
## ComponentInternals
Internal implementation details that vary between environments
```dts
type ComponentInternals = Branded<{}, 'ComponentInternals'>;
```
## ComponentProps
Convenience type to get the props the given component expects.
Example: Ensure a variable contains the props expected by `MyComponent`:
```ts
import type { ComponentProps } from 'svelte';
import MyComponent from './MyComponent.svelte';
// Errors if these aren't the correct props expected by MyComponent.
const props: ComponentProps = { foo: 'bar' };
```
> [!NOTE] In Svelte 4, you would do `ComponentProps` because `MyComponent` was a class.
Example: A generic function that accepts some component and infers the type of its props:
```ts
import type { Component, ComponentProps } from 'svelte';
import MyComponent from './MyComponent.svelte';
function withProps>(
component: TComponent,
props: ComponentProps
) {};
// Errors if the second argument is not the correct props expected by the component in the first argument.
withProps(MyComponent, { foo: 'bar' });
```
```dts
type ComponentProps<
Comp extends SvelteComponent | Component
> =
Comp extends SvelteComponent
? Props
: Comp extends Component
? Props
: never;
```
## ComponentType
This type is obsolete when working with the new `Component` type.
```dts
type ComponentType<
Comp extends SvelteComponent = SvelteComponent
> = (new (
options: ComponentConstructorOptions<
Comp extends SvelteComponent
? Props
: Record
>
) => Comp) & {
/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */
element?: typeof HTMLElement;
};
```
## EventDispatcher
```dts
interface EventDispatcher<
EventMap extends Record
> {/*…*/}
```
```dts
(
...args: null extends EventMap[Type]
? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]
: undefined extends EventMap[Type]
? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]
: [type: Type, parameter: EventMap[Type], options?: DispatchOptions]
): boolean;
```
## MountOptions
Defines the options accepted by the `mount()` function.
```dts
type MountOptions<
Props extends Record
= Record
> = {
/**
* Target element where the component will be mounted.
*/
target: Document | Element | ShadowRoot;
/**
* Optional node inside `target`. When specified, it is used to render the component immediately before it.
*/
anchor?: Node;
/**
* Allows the specification of events.
* @deprecated Use callback props instead.
*/
events?: Record any>;
/**
* Can be accessed via `getContext()` at the component level.
*/
context?: Map;
/**
* Whether or not to play transitions on initial render.
* @default true
*/
intro?: boolean;
} & ({} extends Props
? {
/**
* Component properties.
*/
props?: Props;
}
: {
/**
* Component properties.
*/
props: Props;
});
```
## Snippet
The type of a `#snippet` block. You can use it to (for example) express that your component expects a snippet of a certain type:
```ts
let { banner }: { banner: Snippet<[{ text: string }]> } = $props();
```
You can only call a snippet through the `{@render ...}` tag.
See the [snippet documentation](/docs/svelte/snippet) for more info.
```dts
interface Snippet
{/*…*/}
```
```dts
(
this: void,
// this conditional allows tuples but not arrays. Arrays would indicate a
// rest parameter type, which is not supported. If rest parameters are added
// in the future, the condition can be removed.
...args: number extends Parameters['length'] ? never : Parameters
): {
'{@render ...} must be called with a Snippet': "import type { Snippet } from 'svelte'";
} & typeof SnippetReturn;
```