```js // @noErrors import { SvelteComponent, SvelteComponentTyped, afterUpdate, beforeUpdate, createContext, createEventDispatcher, createRawSnippet, flushSync, fork, getAbortSignal, getAllContexts, getContext, hasContext, hydratable, hydrate, mount, onDestroy, onMount, setContext, settled, tick, unmount, untrack } from 'svelte'; ``` ## SvelteComponent Ceci était la classe de base pour les composants Svelte en Svelte 4. Les composants Svelte 5+ sont d'une nature complètement différente. Pour le typeage, utilisez plutôt `Component`. Pour instancier des composants, utilisez plutôt `mount`. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```dts class SvelteComponent< Props extends Record = Record, Events extends Record = any, Slots extends Record = any > {/*…*/} ```
```dts static element?: typeof HTMLElement; ```
La version "élément personnalisé" du composant. Seulement présente si le composant est compilé avec l'option de compilateur `customElement`.
```dts [prop: string]: any; ```
```dts constructor(options: ComponentConstructorOptions>); ```
- déprécié Cette méthode n'existe que si vous utilisez l'utilitaire de compatibilité `asClassComponent`, qui est une solution bouche-trou. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```dts $destroy(): void; ```
- déprécié Cette méthode n'existe que si vous utilisez un des utilitaires de compatibilité legacy, qui sont une solution bouche-trou. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```dts $on>( type: K, callback: (e: Events[K]) => void ): () => void; ```
- déprécié Cette méthode n'existe que si vous utilisez un des utilitaires de compatibilité legacy, qui sont une solution bouche-trou. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```dts $set(props: Partial): void; ```
- déprécié Cette méthode n'existe que si vous utilisez un des utilitaires de compatibilité legacy, qui sont une solution bouche-trou. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
## SvelteComponentTyped
Utilisez plutôt `Component`. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```dts class SvelteComponentTyped< Props extends Record = Record, Events extends Record = any, Slots extends Record = any > extends SvelteComponent {} ```
## afterUpdate
Utilisez plutôt [`$effect`}(/docs/svelte/$effect)
Programme l'exécution d'un callback immédiatement après la mise à jour du composant. La première exécution du callback aura lieu après le `onMount` initial. En mode runes, utilisez plutôt `$effect`.
```dts function afterUpdate(fn: () => void): void; ```
## beforeUpdate
Utilisez plutôt [`$effect.pre`](/docs/svelte/$effect#$effect.pre).
Programme l'exécution d'un callback immédiatement avant la mise à jour du composant. La première exécution du callback aura lieu avant le `onMount` initial. En mode runes, utilisez plutôt `$effect.pre`.
```dts function beforeUpdate(fn: () => void): void; ```
## createContext
Disponible depuis la version 5.40.0
Renvoie une paire de fonctions `[get, set]` permettant de travailler avec un contexte de manière typée. `get` va jeter une erreur si aucun composant parent n'a précédemment appelé `set`.
```dts function createContext(): [() => T, (context: T) => T]; ```
## createEventDispatcher
Utilisez plutôt des props de callback et/ou la rune `$host()` — voir le [guide de migration](/docs/svelte/v5-migration-guide#Event-changes-Component-events).
Crée un générateur d'évènement qui peut être utilisé pour générer des [évènements de composant](/docs/svelte/legacy-on#Component-events). Les générateurs d'évènement sont des fonctions qui prennent deux arguments : `name` et `detail`. Les évènements de composant créés avec `createEventDispatcher` créent un [CustomEvent](https://developer.mozilla.org/fr/docs/Web/API/CustomEvent). Ces évènements ne ["bubblent"](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture) pas. L'argument `detail` correspond à la propriété [CustomEvent.detail](https://developer.mozilla.org/fr/docs/Web/API/CustomEvent/detail) et peut contenir tout type de données. Le générateur d'évènement peut être typé pour réduire les noms d'évènement autorisés et typer l'argument `detail` : ```ts const dispatch = createEventDispatcher<{ loaded: null; // ne prend pas d'argument detail change: string; // prend un argument detail obligatoire de type string optional: number | null; // prend un argument detail optionnel de type number }>(); ```
```dts function createEventDispatcher< EventMap extends Record = any >(): EventDispatcher; ```
## createRawSnippet Crée un snippet programmatiquement.
```dts function createRawSnippet( fn: (...params: Getters) => { render: () => string; setup?: (element: Element) => void | (() => void); } ): Snippet; ```
## flushSync Force le traitement de manière synchrone de tout changement d'état en attente. Ne renvoie rien si aucun callback n'est fourni, renvoie le résultat de l'appel du callback sinon.
```dts function flushSync(fn?: (() => T) | undefined): T; ```
## fork
Disponible depuis la version 5.42
Crée un "fork", au sein duquel les changements d'état sont évalués mais pas appliqués au DOM. Cela sert à charger des données spéculativement (par exemple) lorsque vous suspectez que l'utilisateur ou l'utilisatrice est sur le point de réaliser une action. Les frameworks comme SvelteKit peuvent se servir de cette API pour précharger des données lorsque l'utilisateur ou l'utilisatrice touche ou survole un lien, donnant aux navigations à venir un effet "instantané". Le paramètre `fn` est une fonctino synchrone qui modifie l'état. Les changements d'état seront annulés après l'initialisation du fork, puis ré-appliqués si et lorsque le fork sera appliqué pour de bon. Lorsqu'il apparaît évident qu'un fork ne sera _pas_ appliqué pour de bon (par ex. parce que l'utilisateur ou l'utilisatrice a navigué vers un autre endroit), le fork doit être supprimé pour éviter des fuites de mémoire.
```dts function fork(fn: () => void): Fork; ```
## getAbortSignal Renvoie un [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) qui s'annule lorsque le [`$derived`](/docs/svelte/$derived) ou [`$effect`](/docs/svelte/$effect) courant est ré-exécuté ou détruit. Doit être appelée lorsqu'un `$derived` ou `$effect` est en cours d'exécution. ```svelte ```
```dts function getAbortSignal(): AbortSignal; ```
## getAllContexts Récupère la map complète des contextes appartenant au composant parent le plus proche. Doit être exécuté pendant l'initialisation du composant. Utile, par exemple, si vous créez programmatiquement un composant et souhaitez lui passer les contexte existant.
```dts function getAllContexts< T extends Map = Map >(): T; ```
## getContext Récupère le contexte nommé `key` appartenant au composant parent le plus proche. Doit être exécuté pendant l'initialisation du composant. [`createContext`](/docs/svelte/svelte#createContext) est une alternative typée.
```dts function getContext(key: any): T; ```
## hasContext Vérifie si une clé `key` a été définie dans le contexte d'un composant parent. Doit être exécuté pendant l'initialisation du composant.
```dts function hasContext(key: any): boolean; ```
## hydratable
```dts function hydratable(key: string, fn: () => T): T; ```
## hydrate Hydrate un composant sur la cible donnée et renvoie les exports et potentiellement les props du composant (si compilé avec `accessors: true`).
```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; transformError?: (error: unknown) => unknown; } : { target: Document | Element | ShadowRoot; props: Props; events?: Record any>; context?: Map; intro?: boolean; recover?: boolean; transformError?: (error: unknown) => unknown; } ): Exports; ```
## mount Monte un composant sur la cible donnée et renvoie les exports et potentiellement les props du composant (si compilé avec `accessors: true`). Les transitions seront jouées pendant le rendu initial à moins que l'option `intro` soit définie à `false`.
```dts function mount< Props extends Record, Exports extends Record >( component: | ComponentType> | Component, options: MountOptions ): Exports; ```
## onDestroy Programme l'exécution d'un callback immédiatement avant le démontage du composant. Parmi `onMount`, `beforeUpdate`, `afterUpdate` et `onDestroy`, `onDestroy` est la seule fonction qui est exécutée pendant le rendu côté serveur du composant.
```dts function onDestroy(fn: () => any): void; ```
## onMount `onMount`, comme [`$effect`](/docs/svelte/$effect), prévoit d'exécuter une fonction dès que le composant a été monté dans le DOM. À la différence de `$effect`, la fonction fournie ne sera exécutée qu'une seule fois. `onMount` doit être exécutée pendant l'initialisation du composant (mais n'a pas besoin de vivre _au sein_ du composant ; elle peut être appelée depuis un module externe). Si une fonction est renvoyée de manière _synchrone_ depuis `onMount`, celle-ci sera exécutée lorsque le composant sera démonté. Les callbacks fournis à `onMount` ne sont pas exécutés pendant le [rendu côté serveur](/docs/svelte/svelte-server#render).
```dts function onMount( fn: () => | NotFunction | Promise> | (() => any) ): void; ```
## setContext Associe un objet de `context` arbitraire avec le composant courant et la clé fournie `key`, et renvoie cet objet. Le contexte est rendu disponible pour les enfants du composant (incluant les contenus slottés) avec `getContext`. Comme pour les fonctions de cycle de vie, cette fonction doit être exécutée lors de l'initialisation du composant. [`createContext`](/docs/svelte/svelte#createContext) est une alternative typée.
```dts function setContext(key: any, context: T): T; ```
## settled
Disponible depuis la version 5.36
Renvoie une promesse qui se résout une fois que tout état a changé, ainsi que tout travail asynchrone résultant de ces changements d'état se sont résolus et que le DOM a été mis à jour.
```dts function settled(): Promise; ```
## tick Renvoie une promesse qui sera résolue lorsque tous les changements d'état en attente auront été appliqués.
```dts function tick(): Promise; ```
## unmount Démonte un composant précédemment monté avec `mount` ou `hydrate`. Depuis la version 5.13.0, si `options.outro` vaut `true`, les [transitions](/docs/svelte/transition) seront jouées avant que le composant soit retiré du DOM. Renvoie une `Promise` qui résout après que les transitions se soient terminées si `options.outro` vaut `true`, ou immédiatement sinon (avant la version 5.13.0, renvoie `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 Lorsqu'utilisé dans un [`$derived`](/docs/svelte/$derived) ou un [`$effect`](/docs/svelte/$effect), tout état lu dans la fonction `fn` ne sera pas traité comme dépendance. ```ts $effect(() => { // ceci sera exécuté lorsque `data` change, mais pas lorsque `time` change save(data, { timestamp: untrack(() => time) }); }); ```
```dts function untrack(fn: () => T): T; ```
## Component Peut être utilisé pour créer des composants Svelte fortement typés. ### Exemple : Vous avez une librairie de composants sur npm appelée `component-library`, à partir de laquelle vous exportez un composant appelé `MyComponent`. Vous souhaitez fournir du typage pour les personnes utilisant Svelte+TypeScript. Vous créez donc un fichier `index.d.ts` : ```ts import type { Component } from 'svelte'; export declare const MyComponent: Component<{ foo: string }> {} ``` Typer de cette manière permet aux IDEs comme VS Code ayant l'extension Svelte de fournir les fonctionnalités intellisense, et donc d'utiliser le composants comme ceci dans un fichier Svelte avec TypeScript : ```svelte ```
```dts interface Component< Props extends Record = {}, Exports extends Record = {}, Bindings extends keyof Props | '' = string > {/*…*/} ```
```dts ( this: void, internals: ComponentInternals, props: Props ): { /** * @deprecated Cette méthode n'existe que lorsque vous utilisez un des utilitaires de * compatibilité, qui sont des solutions bouche-trous. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) * pour plus d'infos. */ $on?(type: string, callback: (e: any) => void): () => void; /** * @deprecated Cette méthode n'existe que lorsque vous utilisez un des utilitaires de * compatibilité, qui sont des solutions bouche-trous. Voir le [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes). * pour plus d'infos. */ $set?(props: Partial): void; } & Exports; ```
- `internal` Un objet interne utilisé par Svelte. Ne pas utiliser ou modifier. - `props` Les props passées au composant.
```dts element?: typeof HTMLElement; ```
La version "élément personnalisé" du composant. Seulement présente si le composant est compilé avec l'option de compilateur `customElement`.
## ComponentConstructorOptions
In Svelte 4, components are classes. In Svelte 5, they are functions. Utilisez plutôt `mount` pour instancier des composants. Voir [guide de migration](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) pour plus d'infos.
```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; ```
```dts transformError?: (error: unknown) => unknown; ```
## ComponentEvents
Le nouveau type `Component` n'a pas de type dédié pour les Events. Utilisez plutôt `ComponentProps`.
```dts type ComponentEvents = Comp extends SvelteComponent ? Events : never; ```
## ComponentInternals Détails d'implémentation interne qui changent selon l'environnement.
```dts type ComponentInternals = Branded<{}, 'ComponentInternals'>; ```
## ComponentProps Type utilitaire pour obtenir les props qu'un certain composant attend. Exemple : vous voulez vous assurer qu'une variable contient les props attendues par `MyComponent` : ```ts import type { ComponentProps } from 'svelte'; import MyComponent from './MyComponent.svelte'; // Affiche une erreur si on ne fournit pas les bonnes props à MyComponent. const props: ComponentProps = { foo: 'bar' }; ``` > [!NOTE] En Svelte 4, vous feriez `ComponentProps` car `MyComponent` était une classe. Exemple : une fonction générique qui accepte un composant et en déduit le type de ses props : ```ts import type { Component, ComponentProps } from 'svelte'; import MyComponent from './MyComponent.svelte'; function withProps>( component: TComponent, props: ComponentProps ) {}; // Affiche une erreur si le deuxième argument ne correspond pas aux props attendues par le composant // fourni en premier argument. withProps(MyComponent, { foo: 'bar' }); ```
```dts type ComponentProps< Comp extends SvelteComponent | Component > = Comp extends SvelteComponent ? Props : Comp extends Component ? Props : never; ```
## ComponentType
Ce type est obsolète lorsque vous utilisez le nouveau type `Component`.
```dts type ComponentType< Comp extends SvelteComponent = SvelteComponent > = (new ( options: ComponentConstructorOptions< Comp extends SvelteComponent ? Props : Record > ) => Comp) & { /** La version "élément personnalisé" du composant. N'est présent que si le composant est compilé * avec l'option de compilateur `customElement`. */ 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; ```
## Fork
Disponible depuis la version 5.42
Représente des tâches se produisant hors de l'écran, telles que des préchargements de données en anticipation d'une navigation.
```dts interface Fork {/*…*/} ```
```dts commit(): Promise; ```
Applique le fork pour de bon. La promesse sera résolue lorsque le changement d'état aura été appliqué
```dts discard(): void; ```
Supprime le fork
## MountOptions Définit les options acceptées par la fonction `mount()`.
```dts type MountOptions< Props extends Record = Record > = { /** * L'élément cible où le composant doit être monté. */ target: Document | Element | ShadowRoot; /** * Un noeud optionnel dans `target`. Lorsque fourni, il est utilisé pour rendre le composant juste * immédiatement avant lui. */ anchor?: Node; /** * Permet la spécification des évènements. * @deprecated Utilisez plutôt les props de callback. */ events?: Record any>; /** * Peut être obtenu via `getContext()` au niveau du composant. */ context?: Map; /** * Si oui ou non il faut jouer les transitions lors du rendu initial. * @default true */ intro?: boolean; /** * Une fonction qui transforme les erreurs attrapées par les frontières d'erreur avant qu'elles ne * soient passées au snippet `failed`. * Vaut par défaut la fonction identité. */ transformError?: ( error: unknown ) => unknown | Promise; } & ({} extends Props ? { /** * Component properties. */ props?: Props; } : { /** * Component properties. */ props: Props; }); ```
## Snippet Le type d'un bloc `$snippet`. Vous pouvez l'utilisez pour (par exemple) exprimer le fait que votre composant attend un snippet d'un certain type : ```ts let { banner }: { banner: Snippet<[{ text: string }]> } = $props(); ``` Vous pouvez uniquement appeler un snippet via la [balise `{@render ...}`](/docs/svelte/snippet). Voir la documentation des [snippets](/docs/svelte/snippet) pour plus d'info.
```dts interface Snippet {/*…*/} ```
```dts ( this: void, // cette condition autorise les tuples mais pas les tableaux. Utiliser des tableaux nécessiterait // un type de paramètre de reste, ce qui n'est pas supporté. Si les paramètre de reste sont // ajoutés dans le futur, cette condition pourra être supprimée. ...args: number extends Parameters['length'] ? never : Parameters ): { '{@render ...} doit être appelée avec un Snippet': "import type { Snippet } from 'svelte'"; } & typeof SnippetReturn; ```