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: docs/documentation/fr/handbook-v2/Type Manipulation/Conditional Types.md
+34-34Lines changed: 34 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,14 +41,14 @@ Quand le type à gauche d'`extends` peut être assigné au type de droite, le r
41
41
Ces exemples ne montrent pas forcément l'intérêt des conditions, vu qu'on peut voir si `Dog extends Animal` et décider entre `number` et `string` de nous-même.
42
42
Cet intérêt se manifeste surtout en utilisant les types génériques.
43
43
44
-
For example, let's take the following `createLabel`function:
These overloads for createLabel describe a single JavaScript function that makes a choice based on the types of its inputs. Note a few things:
62
+
Ces surcharges de createLabel décrivent une seule fonction JavaScript qui fait des choix en fonction du type de son entrée. Notez, cependant, quelques problèmes :
63
63
64
-
1.If a library has to make the same sort of choice over and over throughout its API, this becomes cumbersome.
65
-
2.We have to create three overloads: one for each case when we're _sure_ of the type (one for `string` and one for `number`), and one for the most general case (taking a `string | number`). For every new type `createLabel`can handle, the number of overloads grows exponentially.
64
+
1.Si une librairie doit faire à chaque fois plusieurs choix à travers son API, toutes ces surcharges peuvent vite polluer le code.
65
+
2.Trois surcharges doivent être créées : une pour chaque cas où vous êtes _sûrs et certains_ du type de votre valeur (un cas pour `string`, un pour `number`), et une surcharge plus générale (`string | number`). Pour chaque nouveau type que `createLabel`peut gérer, le nombre de surcharges croît exponentiellement.
66
66
67
-
Instead, we can encode that logic in a conditional type:
67
+
À la place, nous pouvons décrire cette logique avec un type conditionnel :
@@ -102,24 +102,24 @@ let a = createLabel("typescript");
102
102
let b =createLabel(2.8);
103
103
// ^?
104
104
105
-
let c =createLabel(Math.random() ?"hello":42);
105
+
let c =createLabel(Math.random() ?"bonjour":42);
106
106
// ^?
107
107
```
108
108
109
-
### Conditional Type Constraints
109
+
### Contraintes de Types Conditionnels
110
110
111
-
Often, the checks in a conditional type will provide us with some new information.
112
-
Just like with narrowing with type guards can give us a more specific type, the true branch of a conditional type will further constrain generics by the type we check against.
111
+
Les vérifications sur des types conditionnels vont souvent révéler de nouvelles informations.
112
+
Tout comme rétrécir avec des gardes de types peut donner un type plus spécifique, la branche "vrai" du type conditionnel va restreindre le type générique qu'on vérifie avec la contrainte demandée.
113
113
114
-
For example, let's take the following:
114
+
Prenons cet exemple :
115
115
116
116
```ts twoslash
117
117
// @errors: 2536
118
118
typeMessageOf<T> =T["message"];
119
119
```
120
120
121
-
In this example, TypeScript errors because`T`isn't known to have a property called`message`.
122
-
We could constrain `T`, and TypeScript would no longer complain:
121
+
TypeScript signale une erreur parce que`T`n'aura pas forcément une propriété`message`.
122
+
Il serait possible de contraindre `T`, et TypeScript ne donnera plus d'erreur :
@@ -153,39 +153,39 @@ type DogMessageContents = MessageOf<Dog>;
153
153
// ^?
154
154
```
155
155
156
-
Within the true branch, TypeScript knows that`T`_will_ have a `message` property.
156
+
Dans la branche "vrai", TypeScript sait que`T`_va_ avoir une propriété `message`.
157
157
158
-
As another example, we could also write a type called `Flatten`that flattens array types to their element types, but leaves them alone otherwise:
158
+
Dans un tout autre exemple, nous pouvons aussi écrire un type `Flatten`qui aplatit les tableaux en récupérant les types de leurs contenus, mais laisse les types tels quels sinon :
159
159
160
160
```ts twoslash
161
161
typeFlatten<T> =Textendsany[] ?T[number] :T;
162
162
163
-
//Extracts out the element type.
163
+
//Extraction du type des éléments de tableau
164
164
typeStr=Flatten<string[]>;
165
165
// ^?
166
166
167
-
//Leaves the type alone.
167
+
//Laisse le type tranquille.
168
168
typeNum=Flatten<number>;
169
169
// ^?
170
170
```
171
171
172
-
When`Flatten`is given an array type, it uses an indexed access with`number`to fetch out `string[]`'s element type.
173
-
Otherwise, it just returns the type it was given.
172
+
Quand`Flatten`reçoit un type tableau, il utilise un accès indexé avec`number`pour récupérer le type des éléments de `string[]`.
173
+
Sinon, il retourne simplement le type qui lui a été donné.
174
174
175
-
### Inferring Within Conditional Types
175
+
### Inférence dans les Types Conditionnels
176
176
177
-
We just found ourselves using conditional types to apply constraints and then extract out types.
178
-
This ends up being such a common operation that conditional types make it easier.
177
+
Nous avons utilisé des types conditionnels pour appliquer des contraintes et extraire des types.
178
+
Cette opération devient très facile avec ces types, qu'elle est devenue très commune.
179
179
180
-
Conditional types provide us with a way to infer from types we compare against in the true branch using the `infer` keyword.
181
-
For example, we could have inferred the element type in `Flatten`instead of fetching it out "manually" with an indexed access type:
180
+
Les types conditionnels fournissent une façon d'inférer depuis les types qu'on compare avec le mot-clé `infer`.
181
+
Par exemple, on pouvait inférer le type d'éléments de tableaux dans `Flatten`au lieu de le récupérer "manuellement" :
Here, we used the `infer`keyword to declaratively introduce a new generic type variable named`Item` instead of specifying how to retrieve the element type of `T`within the true branch.
188
-
This frees us from having to think about how to dig through and probing apart the structure of the types we're interested in.
187
+
Ici, le mot-clé `infer`introduit un nouveau type générique variable appelé`Item`, au lieu de préciser comment récupérer le type élément de `T`dans la branche vrai.
188
+
Cela nous libère de devoir penser à la façon de creuser et obtenir manuellement les types qui nous intéressent.
189
189
190
190
We can write some useful helper type aliases using the `infer` keyword.
191
191
For example, for simple cases, we can extract the return type out from function types:
0 commit comments