Ce guide de migration fournit un aperçu de comment migrer Svelte de la version 3 à la version 4.
Voir les liens vers les PRs pour plus de détails sur chaque changement. Vous pouvez utiliser le
script de migration pour migrer certains de ces changements automatiquement : npx svelte-migrate@latest svelte-4.
Si vous maintenez une librairie, vous devriez envisager le support à la fois de la version et de la
version 3, et pas uniquement de la version 4. Puisque la plupart des changements bloquants ne
concernent que peu de personnes, cela devrait être possible sans trop d’efforts. Et pensez à mettre
également à jour la gamme de versions de votre peerDependencies.
Versions minimum requises
Passez à Node 16 ou supérieur. Les versions antérieures ne sont plus supportées
(#8566)
Si vous utilisez SvelteKit, passer à 1.20.4 ou plus récent
(#sveltejs/kit#10172)
Si vous utilisez Vite sans SvelteKit, passez à vite-plugin-svelte 2.4.1 ou plus récent
(#8516)
Si vous utilisez webpack, passer à webpack 5 ou supérieur et svelte-loader 3.1.8 ou plus
supérieur. Les versions plus anciennes ne sont plus supportées
(#8515,
Si vous utilisez Rollup, passez à rollup-plugin-svelte 7.1.5 ou supérieur
(198dbcf)
Si vous utilisez TypeScript, passez à TypeScript 5 ou supérieur. Les versions antérieures peuvent
encore être compatibles, mais nous ne pouvons pas le garantir
(#8488)
Conditions des navigateurs pour les bundlers
Les bundlers doivent maintenant préciser la condition browser lorsqu’ils compilent un bundle
frontend pour le navigateur. SvelteKit et Vite s’occupent de gérer cela automatiquement pour vous.
Si vous utilisez autre chose, il se peut que vous observiez des callbacks de cycle de vie tels que
onMount ne pas être appelés, et vous aurez alors besoin de mettre à jour la configuration de
résolution de module.
Avec Rollup, vous pouvez faire cela dans le plugin @rollup/plugin-node-resolve en définissant
browser: true dans ses options. Voir la documentation de
rollup-plugin-svelte pour plus d’infos
Avec webpack, vous pouvez faire cela en ajoutant "browser" dans le tableau de conditionNames.
Vous pourriez aussi avoir besoin de mettre à jour votre configuration d’alias, si vous en avez
une. Voir la documentation de svelte-loader
pour plus d’infos
Svelte ne supporte plus le format CommonJS (CJS) en sortie de son compilateur et a également
supprimé le hook svelte/register et la version du runtime CommonJS. Si vous a besoin de garder un
format compilé CJS, envisagez l’utilisation d’un bundler pour convertir le format ESM — que Svelte
fournit en sortie de compilation — en CJS dans une étape post-build.
(#8613)
Types plus stricts pour les fonctions Svelte [!VO ]Stricter types for Svelte functions
Les types des fonctions createEventDispatcher, Action, ActionReturn et onMount sont
maintenant plus stricts :
createEventDispatcher permet maintenant de préciser qu’une payload est optionnelle, requise ou
non existante, et ses exécutions sont vérifiées en conséquence.
(#7224)
Creates an event dispatcher that can be used to dispatch component events.
Event dispatchers are functions that can take two arguments: name and detail.
Component events created with createEventDispatcher create a
CustomEvent.
These events do not bubble.
The detail argument corresponds to the 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:
constdispatch=createEventDispatcher<{loaded:null;// does not take a detail argumentchange:string;// takes a detail argument of type string, which is requiredoptional:number|null;// takes an optional detail argument of type number}>();
Use callback props and/or the $host() rune instead — see migration guide
Creates an event dispatcher that can be used to dispatch component events.
Event dispatchers are functions that can take two arguments: name and detail.
Component events created with createEventDispatcher create a
CustomEvent.
These events do not bubble.
The detail argument corresponds to the 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:
constdispatch=createEventDispatcher<{loaded:null;// does not take a detail argumentchange:string;// takes a detail argument of type string, which is requiredoptional:number|null;// takes an optional detail argument of type number}>();
Use callback props and/or the $host() rune instead — see migration guide
reference<{optional(property)optional:number|null:number|null;required(property)required:string:string;noArgument(property)noArgument:null:null;}>();// Svelte version 3:
dispatchconstdispatch:EventDispatcher<"optional">(type:"optional",parameter?:number|null|undefined,options?:DispatchOptions|undefined)=>boolean('optional');dispatchconstdispatch:EventDispatcher<"required">(type:"required",parameter:string,options?:DispatchOptions|undefined)=>boolean('required');// je peux toujours omettre l'argument de détaildispatchconstdispatch:EventDispatcher<"noArgument">(type:"noArgument",parameter?:null|undefined,options?:DispatchOptions|undefined)=>boolean('noArgument','surprise');// je peux toujours ajouter un argument de détail// Svelte version 4 avec TypeScript mode strict:
dispatchconstdispatch:EventDispatcher<"optional">(type:"optional",parameter?:number|null|undefined,options?:DispatchOptions|undefined)=>boolean('optional');dispatchconstdispatch:EventDispatcher<"required">(type:"required",parameter:string,options?:DispatchOptions|undefined)=>boolean('required');// erreur, argument manquantdispatchconstdispatch:EventDispatcher<"noArgument">(type:"noArgument",parameter?:null|undefined,options?:DispatchOptions|undefined)=>boolean('noArgument','surprise');// erreur, vous ne pouvez pas fournir d'argument
Action et ActionReturn ont maintenant un type undefined par défaut pour leur argument, ce
qui signifie que vous devez typer le générique si vous souhaitez préciser que cette action attend un
paramètre. Le script de migration s’occupera de ça pour vous.
(#7442)
const action: Action = (node, params) => { ... } // ceci est maintenant un erreur si vous fournissez n'importe quel argumentconstactionconstaction:Action<HTMLElement,string>:ActiontypeAction=/*unresolved*/any<HTMLElementinterfaceHTMLElement
The HTMLElement interface represents any HTML element. Some elements directly implement this interface, while others implement it via an interface that inherits it.
,string>=(node(parameter)node:any,params(parameter)params:any)=>{...}// l'argument est de type string
onMount a désormais une erreur de type si vous lui faites renvoyer une fonction de manière
asynchrone, car cela entraînera très probablement un bug dans votre code : vous vous attendrez à ce
que le callback soit appelé au démontage du composant, ce qui ne se produit que pour les fonctions
renvoyées de manière synchrone (#8136).
// exemple où ce changement révèle un bugonMountany(// nettoyage() n'est pas appelé car la fonction fournie à onMount est asynchrone
async () => {
const qqch = await foo();// nettoyage est appelé car la fonction fournie à onMount est synchrone()=>{fooany().thenany(qqch(parameter)qqch:any=>{...}); // ...
return()=>nettoyageany();});
Éléments personnalisés avec Svelte
La création d’éléments personnalisés avec Svelte a été refondue et significativement améliorée.
L’option tag est déprécié en faveur de la nouvelle option customElement :
Ce changement a été introduit pour permettre plus de
configurabilité dans des cas d’usage avancés. Le script de
migration ajustera votre code automatiquement. Le timing de mise à jour des propriétés a également
légèrement changé. (#8457)
SvelteComponentTyped est déprécié
SvelteComponentTyped est déprécié, puisque SvelteComponent permet maintenant de remplacer ses
capacités de typage. Remplacez toutes les instances de SvelteComponentTyped par SvelteComponent.
import { SvelteComponentTyped } from 'svelte';import{SvelteComponent(alias)classSvelteComponent<PropsextendsRecord<string,any>=Record<string,any>,EventsextendsRecord<string,any>=any,SlotsextendsRecord<string,any>=any>importSvelteComponent
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 for more info.
reference}from'svelte';export class Foo extends SvelteComponentTyped<{ aProp: string }> {}exportclassFooclassFooextendsSvelteComponent(alias)classSvelteComponent<PropsextendsRecord<string,any>=Record<string,any>,EventsextendsRecord<string,any>=any,SlotsextendsRecord<string,any>=any>importSvelteComponent
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 for more info.
Si vous avez précédemment utilisé SvelteComponent en tant qu’instance de composant, vous verrez
désormais peut-être une erreur de type quelque opaque, qui est résolue en changeant : type SvelteComponent en : typeof SvelteComponent<any>.
Le script de migration s’occupera de faire ces changements pour vous.
(#8512)
Les transitions sont locales par défaut
Les transitions sont maintenant locales par défaut pour éviter les confusions lors des navigations
entre pages. “local” signifie qu’une transition ne sera pas jouée si elle est définie au sein d’un
bloc de contrôle de flux imbriqué (each / if/await/key), et qu’un bloc parent qui n’est pas
son parent direct est créé ou détruit. Dans l’exemple suivant, l’animation d’intro slide ne sera
jouée que lorsque success passe de false à true, mais ne sera pas jouée lorsque show pass
de false à true :
Pour rendre des transitions globales, ajoutez le modificateur |global — ces transitions seront
jouées lorsque n’importe quel bloc de contrôle de flux est créé ou détruit. Le script de migration
fera ces changements pour vous.
(#6686)
Liaisons de slot par défaut
Les liaisons de slot par défaut ne sont plus exposées à slots nommés et inversement :
<script>importNestedfrom'./Nested.svelte';</script><Nestedlet:count><p>count dans le slot par défaut — disponible : {count}</p><pslot="bar">count dans le slot "bar" — non disponible : {count}</p></Nested>
Cela rend les liaisons de slot plus consistentes car le comportement est non défini lorsque par
exemple le slot par défaut vient d’une liste, mais pas le slot nommé.
(#6049)
Préprocessseurs
L’ordre dans lequel les préprocesseurs sont appliqué a changé. Dorénavant, les préprocesseurs sont
exécutés dans l’ordre, et au sein d’un même groupe, l’order est : markup, script, style.
The preprocess function provides convenient hooks for arbitrarily transforming component source code.
For example, it can be used to convert a <style lang="sass"> block into vanilla CSS.
The preprocess function provides convenient hooks for arbitrarily transforming component source code.
For example, it can be used to convert a <style lang="sass"> block into vanilla CSS.
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');// Prints: hello world, to stdoutconsole.log('hello %s','world');// Prints: hello world, to stdoutconsole.error(newError('Whoops, something bad happened'));// Prints error message and stack trace to stderr:// Error: Whoops, something bad happened// at [eval]:5:15// at Script.runInThisContext (node:vm:132:18)// at Object.runInThisContext (node:vm:309:38)// at node:internal/process/execution:77:19// at [eval]-wrapper:6:22// at evalScript (node:internal/process/execution:76:60)// at node:internal/main/eval_string:23:3constname='Will Robinson';console.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();consterr=getStreamSomehow();constmyConsole=newconsole.Console(out,err);myConsole.log('hello world');// Prints: hello world, to outmyConsole.log('hello %s','world');// Prints: hello world, to outmyConsole.error(newError('Whoops, something bad happened'));// Prints: [Error: Whoops, something bad happened], to errconstname='Will Robinson';myConsole.warn(`Danger ${name}! Danger!`);// Prints: Danger Will Robinson! Danger!, to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).
constcount=5;console.log('count: %d',count);// Prints: count: 5, to stdoutconsole.log('count:',count);// Prints: count: 5, to stdout
Ceci peut vous concerner si par exemple vous utilisez MDsveX — dans ce cas vous devriez vous
assurer qu’il est appliqué avant tout préprocesseur de script ou de style.
Chaque préprocesseur doit également avoir un nom.
(#8618)
Nouveau package eslint
eslint-plugin-svelte3 est déprécié. Il peut éventuellement toujours fonctionner avec Svelte 4,
mais nous n’offrons aucune garantie à ce niveau. Nous recommandons de passer à notre nouveau package
eslint-plugin-svelte. Voir le post
Github pour obtenir des
instructions sur comment migrer. Alternativement, vous pouvez créer un nouveau projet en utilisant
npm create svelte@latest, sélectionner l’option eslint (et éventuellement TypeScript), puis copier
les fichiers correspondants dans votre projet existant.
Autres changements bloquants
l’attribut inert est maintenant appliqué aux éléments en train de sortir du DOM pour les rendre
invisibles aux technologies d’assistance et éviter les interactions.
(#8628)
l’environnement d’exécution utilise désormais classList.toggle(name, boolean), qui peut ne pas
fonctionner avec de très vieux navigateurs. Envisagez l’utilisation d’un
polyfill si vous avez besoin de supporter ces
navigateurs. (#8629)
l’environnement d’exécution utilise désormais le constructor CustomEvent, qui peut ne pas
fonctionner avec de très vieux navigateurs. Envisagez l’utilisation d’un
polyfill si vous avez
besoin de supporter ces
navigateurs. (#8629)
les personnes implémentant de zéro leurs propres stores en utilisant l’interface
StartStopNotifier (qui est fournie aux fonctions de création de store comme writable) importée
depuis svelte/store doivent désormais fournir une fonction de mise à jour en plus de la fonction
passée en premier argument. Ceci n’a pas d’effet sur les personnes utilisant des stores ou créant
des stores à partir de stores Svelte existants.
(#6750)
derived va dorénavant lever une erreur si on lui fournit des valeurs falsy plutôt que des
stores. (#7947)
les définitions de type pour svelte/internal ont été supprimées pour décourager l’usage de ces
méthodes internes ne faisant pas partie de l’API publique. La plupart de ces méthodes vont très
certainement évoluer pour Svelte 5.
La suppression de noeuds DOM se fait dorénavant par batchs, ce qui change légèrement l’ordre des
évènements déclenchés si vous utilisez un MutationObserver sur ces éléments.
(#8763)
si vous amélioriez le typage global via le namespace svelte.JSX, vous aurez peut-être besoin de
migrer ce typage pour utiliser plutôt le namespace svelteHTML. De même, si vous utilisiez le
namespace svelte.JSX pour accéder à ses définitions de type, vous devrez peut-être migrer pour
importer plutôt ces types depuis svelte/elements. Vous trouverez plus d’informations sur ce sujet
ici.