You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: documentation/docs/05-misc/03-typescript.md
+44-44Lines changed: 44 additions & 44 deletions
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,15 @@
2
2
title: TypeScript
3
3
---
4
4
5
-
You can use TypeScript within Svelte components. IDE extensions like the [Svelte VSCode extension](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode)will help you catch errors right in your editor, and[`svelte-check`](https://www.npmjs.com/package/svelte-check)does the same on the command line, which you can integrate into your CI.
5
+
Vous pouvez utiliser TypeScript dans vos composants. Des extensions d'<spanclass="vo">[IDE](/docs/development#ide)</span> comme l'[extension Svelte VSCode](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode)vous aideront à voir et corriger les erreurs directement dans votre éditeur, et[`svelte-check`](https://www.npmjs.com/package/svelte-check)fera la même chose en ligne de commande, que vous pouvez ajouter à votre chaîne d'intégration continue.
6
6
7
-
## Setup
7
+
## Mise en place
8
8
9
-
To use TypeScript within Svelte components, you need to add a preprocessor that will turn TypeScript into JavaScript.
9
+
Pour utiliser TypeScript dans vos composants Svelte, vous devez ajouter un préprocesseur qui compilera le code TypeScript en JavaScript.
10
10
11
-
### Using SvelteKit or Vite
11
+
### Utiliser SvelteKit ou Vite
12
12
13
-
The easiest way to get started is scaffolding a new SvelteKit project by typing `npm create svelte@latest`, following the prompts and choosing the TypeScript option.
13
+
La façon la plus simple de démarrer avec Typescript est de créer un nouveau projet en tapant : `npm create svelte@latest`, en suivant les propositions et en choisissant l'option TypeScript.
14
14
15
15
```ts
16
16
/// file: svelte.config.js
@@ -24,7 +24,7 @@ const config = {
24
24
exportdefaultconfig;
25
25
```
26
26
27
-
If you don't need or want all the features SvelteKit has to offer, you can scaffold a Svelte-flavoured Vite project instead by typing `npm create vite@latest`and selecting the `svelte-ts` option.
27
+
Si vous n'avez pas besoin ou ne souhaitez pas de toutes les fonctionnalités de SvelteKit, vous pouvez démarrer un projet Svelte avec Vite en tapant : `npm create vite@latest`et en choisissant l'option `svelte-ts`.
28
28
29
29
```ts
30
30
/// file: svelte.config.js
@@ -37,17 +37,17 @@ const config = {
37
37
exportdefaultconfig;
38
38
```
39
39
40
-
In both cases, a `svelte.config.js`with`vitePreprocess`will be added. Vite/SvelteKit will read from this config file.
40
+
Dans les deux cas, un fichier `svelte.config.js`avec`vitePreprocess`sera ajouté. Vite et SvelteKit liront ce fichier de configuration.
41
41
42
-
### Other build tools
42
+
### Autres outils de compilation
43
43
44
-
If you're using tools like Rollup or Webpack instead, install their respective Svelte plugins. For Rollup that's [rollup-plugin-svelte](https://github.com/sveltejs/rollup-plugin-svelte)and for Webpack that's[svelte-loader](https://github.com/sveltejs/svelte-loader). For both, you need to install `typescript`and`svelte-preprocess`and add the preprocessor to the plugin config (see the respective READMEs for more info). If you're starting a new project, you can also use the [rollup](https://github.com/sveltejs/template)or [webpack](https://github.com/sveltejs/template-webpack)template to scaffold the setup from a script.
44
+
Si vous utilisez d'autres outils comme Rollup ou Webpack, installez leurs <spanclass="vo">[plugins](/docs/development#plugin)</span> Svelte respectifs. Pour Rollup, il s'agit de [rollup-plugin-svelte](https://github.com/sveltejs/rollup-plugin-svelte)et pour Webpack, c'est[svelte-loader](https://github.com/sveltejs/svelte-loader). Dans les deux cas, vous devez installer `typescript`et`svelte-preprocess`et ajouter le préprocesseur à la configuration du plugin (voir les documentations respectives). Si vous démarrez un nouveau projet, vous pouvez utiliser le [template rollup](https://github.com/sveltejs/template)ou le [template webpack](https://github.com/sveltejs/template-webpack)pour configurer votre projet.
45
45
46
-
> If you're starting a new project, we recommend using SvelteKit or Vite instead
46
+
> Si vous démarrez un nouveau projet, nous vous recommandons plutôt d'utiliser SvelteKit ou Vite.
47
47
48
48
## `<script lang="ts">`
49
49
50
-
To use TypeScript inside your Svelte components, add`lang="ts"`to your`script`tags:
50
+
Pour utiliser TypeScript dans vos composants Svelte, ajoutez`lang="ts"`au tag`script` :
51
51
52
52
```svelte
53
53
<script lang="ts">
@@ -61,7 +61,7 @@ To use TypeScript inside your Svelte components, add `lang="ts"` to your `script
61
61
62
62
### Props
63
63
64
-
Props can be typed directly on the `export let`statement:
64
+
Les <spanclass="vo">[props](/docs/web#props)</span> peuvent directement être typées sur l'instruction `export let` :
65
65
66
66
```svelte
67
67
<script lang="ts">
@@ -71,7 +71,7 @@ Props can be typed directly on the `export let` statement:
71
71
72
72
### Slots
73
73
74
-
Slot and slot prop types are inferred from the types of the slot props passed to them:
74
+
Les <spanclass="vo">[slots](/docs/sveltejs#slot)</span> et les types de leurs <spanclass="vo">[props](/docs/web#props)</span> sont déduits des types des props qui leurs sont passées :
75
75
76
76
```svelte
77
77
<script lang="ts">
@@ -80,103 +80,103 @@ Slot and slot prop types are inferred from the types of the slot props passed to
80
80
81
81
<slot {name} />
82
82
83
-
<!-- Later -->
83
+
<!-- Ailleurs -->
84
84
<Comp let:name>
85
-
<!-- ^ Inferred as string -->
85
+
<!-- ^ Déduit comme string -->
86
86
{name}
87
87
</Comp>
88
88
```
89
89
90
90
### Events
91
91
92
-
Events can be typed with `createEventDispatcher`:
92
+
Les événements peuvent être typés avec `createEventDispatcher`:
93
93
94
94
```svelte
95
95
<script lang="ts">
96
96
import { createEventDispatcher } from 'svelte';
97
97
98
98
const dispatch = createEventDispatcher<{
99
-
event: null; // does not accept a payload
100
-
type: string; // has a required string payload
101
-
click: string | null; // has an optional string payload
99
+
event: null; // n'accepte pas d'argument
100
+
type: string; // contient obligatoirement une string
101
+
click: string | null; // peut contenir une string ou être non défini
Svelte provides a best effort of all the HTML DOM types that exist. Sometimes you may want to use experimental attributes or custom events coming from an action. In these cases, TypeScript will throw a type error, saying that it does not know these types. If it's a non-experimental standard attribute/event, this may very well be a missing typing from our [HTML typings](https://github.com/sveltejs/svelte/blob/master/packages/svelte/elements.d.ts). In that case, you are welcome to open an issue and/or a PR fixing it.
120
+
Svelte fournit des types aussi proche que possible pour chaque élément HTML du <spanclass="vo">[DOM](/docs/web#dom)</span> qui existe. Parfois, vous voudrez utiliser des attributs expérimentaux ou des événements personnalisés. Dans ces cas, TypeScript lèvera une erreur de type, en indiquant qu'il ne connaît pas ces types. S'il s'agit d'un attribut ou événement standard et non expérimental, il se peut tout à fait que ce soit un type manquant dans [le typage HTML de Svelte](https://github.com/sveltejs/svelte/blob/master/elements/index.d.ts). Dans ce cas, vous êtes le bienvenue pour ouvrir une <spanclass="vo">[issue](/docs/development#issue)</span> ou une <spanclass="vo">[PR](/docs/development#pr)</span> pour le corriger.
121
121
122
-
In case this is a custom or experimental attribute/event, you can enhance the typings like this:
122
+
S'il s'agit d'un attribut ou d'un événement expérimental ou personnalisé, vous pouvez étendre le typage comme suit :
//If you want to use myCustomAttribute={..} (note: all lowercase)
136
-
mycustomattribute?:any; //You can replace any with something more specific if you like
135
+
//Si vous voulez utiliser myCustomAttribute={..} (note: tout en minuscule)
136
+
mycustomattribute?:any; //Vous pouvez remplacer any par quelque chose de plus précis si vous le souhaitez
137
137
}
138
138
}
139
139
```
140
140
141
-
Then make sure that `d.ts`file is referenced in your `tsconfig.json`. If it reads something like `"include": ["src/**/*"]`and your `d.ts`file is inside `src`, it should work. You may need to reload for the changes to take effect.
141
+
Ensuite, assurez vous que les fichiers `d.ts`soient référencés dans `tsconfig.json`. Si vous lisez quelque chose comme : `"include": ["src/**/*"]`et vos fichiers `d.ts`sont dans votre dossier `src`, ça devrait marcher. Vous devrez peut-être relancer votre serveur pour que le changement prenne effet.
142
142
143
-
## Experimental advanced typings
143
+
## Types avancés expérimentaux
144
144
145
-
A few features are missing from taking full advantage of TypeScript in more advanced use cases like typing that a component implements a certain interface, explicitly typing slots, or using generics. These things are possible using experimental advanced type capabilities. See [this RFC](https://github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-events.md)for more information on how to make use of them.
145
+
Quelques fonctionnalités sont manquantes pour bénéficier de tous les avantages de TypeScript dans des cas plus avancés, comme pour typer qu'un composant étend une interface, pour typer les <spanclass="vo">[slots](/docs/sveltejs#slot)</span> ou pour utiliser des génériques. Tout ceci est rendu possible en utilisant des fonctionnalités expérimentales avancées. Voir [la RFC](https://github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-events.md)pour savoir comment définir de tels typages.
146
146
147
-
> The API is experimental and may change at any point
147
+
> Cette <spanclass="vo">[API](/docs/development#api)</span> est expérimentale et peut changer à tout moment.
148
148
149
149
## Limitations
150
150
151
-
### No TS in markup
151
+
### Pas de TypeScript dans le code HTML
152
152
153
-
You cannot use TypeScript in your template's markup. For example, the following does not work:
153
+
Vous ne pouvez pas utiliser explicitement TypeScript dans les templates HTML. Par exemple, l'exemple suivant n'est pas possible :
154
154
155
155
```svelte
156
156
<script lang="ts">
157
157
let count = 10;
158
158
</script>
159
159
160
-
<h1>Count as string: {count as string}!</h1> <!-- ❌ Does not work -->
160
+
<h1>Count as string: {count as string}!</h1> <!-- ❌ Ne fonctionne pas -->
161
161
{#if count > 4}
162
-
{@const countString: string = count} <!-- ❌ Does not work -->
162
+
{@const countString: string = count} <!-- ❌ Ne fonctionne pas -->
163
163
{countString}
164
164
{/if}
165
165
```
166
166
167
-
### Reactive Declarations
167
+
### Déclarations réactives
168
168
169
-
You cannot type your reactive declarations with TypeScript in the way you type a variable. For example, the following does not work:
169
+
Vous ne pouvez pas typer les déclarations réactives avec TypeScript de la manière dont vous typeriez une variable. Par exemple, le code suivant ne fonctionne pas :
170
170
171
171
```svelte
172
172
<script lang="ts">
173
173
let count = 0;
174
174
175
-
$: doubled: number = count * 2; // ❌ Does not work
175
+
$: doubled: number = count * 2; // ❌ Ne fonctionne pas
176
176
</script>
177
177
```
178
178
179
-
You cannot add a `: TYPE`because it's invalid syntax in this position. Instead, you can move the definition to a `let`statement just above:
179
+
Vous ne pouvez pas utiliser `: TYPE`car cela résulte en une syntaxe invalide. A la place, vous pouvez déplacer le typage sur une instruction `let`juste au dessus :
180
180
181
181
```svelte
182
182
<script lang="ts">
@@ -189,4 +189,4 @@ You cannot add a `: TYPE` because it's invalid syntax in this position. Instead,
0 commit comments