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
oneline: Apprenez TypeScript si vous avez un vécu avec les langages orientés objet
6
+
oneline: Apprenez TypeScript si vous avez de l'expérience avec les langages orientés objet
7
7
---
8
8
9
9
TypeScript est un choix populaire pour les développeurs habitués aux autres langages à typage statique, comme le C# et le Java.
@@ -71,16 +71,16 @@ Parce que les types ne sont que des ensembles, une valeur peut appartenir à _p
71
71
Une fois que vous pensez aux types en tant qu'ensembles, certaines opérations deviennent naturelles.
72
72
Par exemple, en C#, il est bizarre de transmettre une valeur qui est _soit_ un `string` ou `int`, parce qu'il n'existe aucun type les représentant tous les deux.
73
73
74
-
In TypeScript, ce procédé devient naturel quand vous pensez aux types en tant qu'ensembles.
74
+
En TypeScript, ce procédé devient naturel quand vous pensez aux types en tant qu'ensembles.
75
75
Comment décrire une valeur qui appartient, soit à l'ensemble des `string`, soit à celui des `number` ?
76
-
Elle appartient simplement à l'_union_ de ces valeurs : `string | number`.
76
+
Elle appartient simplement à l'_union_ de ces ensembles : `string | number`.
77
77
78
-
TypeScript provides a number of mechanisms to work with types in a set-theoretic way, and you'll find them more intuitive if you think of types as sets.
78
+
TypeScript fournit un certain nombre de mécanismes pour travailler avec les types de façons similaires à la théorie des ensembles, et ces façons seront plus intuitives si on pense aux types en tant qu'ensembles.
79
79
80
-
### Erased Structural Types
80
+
### Types Structurels Effacés
81
81
82
-
In TypeScript, objects are _not_ of a single exact type.
83
-
For example, if we construct an object that satisfies an interface, we can use that object where that interface is expected even though there was no declarative relationship between the two.
82
+
En TypeScript, les objets n'ont _pas_ de seul et unique type.
83
+
Par exemple, si nous créons un objet qui correspond à une interface, nous pouvons utiliser cet objet là où l'interface est attendue même si aucune relation de déclaration n'existait entre les deux.
84
84
85
85
```ts twoslash
86
86
interfacePointlike {
@@ -109,70 +109,70 @@ logPoint(obj);
109
109
logName(obj);
110
110
```
111
111
112
-
TypeScript's type system is _structural_, not nominal: We can use`obj`as a `Pointlike`because it has `x`and`y`properties that are both numbers.
113
-
The relationships between types are determined by the properties they contain, not whether they were declared with some particular relationship.
112
+
Le système de types de TypeScript est _structurel_, et non nominal : nous pouvons utiliser`obj`en tant que `Pointlike`parce qu'`obj` a les propriétés `x`et`y`qui sont toutes les deux des nombres.
113
+
Les relations entre types sont déterminées par les propriétés qu'ils contiennent, et non pas avec une relation de déclaration entre eux.
114
114
115
-
TypeScript's type system is also _not reified_: There's nothing at runtime that will tell us that `obj`is `Pointlike`.
116
-
In fact, the `Pointlike`type is not present _in any form_ at runtime.
115
+
Le système de types de TypeScript n'est également _pas réifié_: rien ne va pouvoir nous dire qu'`obj`est un `Pointlike`, lors de l'exécution.
116
+
D'ailleurs, le type `Pointlike`n'est _même pas présent_ lors de l'exécution.
117
117
118
-
Going back to the idea of _types as sets_, we can think of `obj`as being a member of both the `Pointlike` set of values and the `Named` set of values.
118
+
Si nous revenons à notre façon de réfléchir aux types _en tant qu'ensemble_, nous pouvons dire qu'`obj`est membre de l'ensemble `Pointlike`, ainsi que de l'ensemble `Named`.
119
119
120
-
### Consequences of Structural Typing
120
+
### Conséquences du typage structurel
121
121
122
-
OOP programmers are often surprised by two particular aspects of structural typing.
122
+
Deux aspects particuliers de ce système surprennent souvent les développeurs POO.
123
123
124
-
#### Empty Types
124
+
#### Types vides
125
125
126
-
The first is that the _empty type_ seems to defy expectation:
126
+
Le premier est que le _type vide_ a l'air d'agir de manière impromptue :
127
127
128
128
```ts twoslash
129
129
classEmpty {}
130
130
131
131
function fn(arg:Empty) {
132
-
//do something?
132
+
//fais quelque chose ?
133
133
}
134
134
135
-
//No error, but this isn't an 'Empty' ?
135
+
//Pas d'erreur, mais ce n'est pas un Empty ?
136
136
fn({ k: 10 });
137
137
```
138
138
139
-
TypeScript determines if the call to `fn`here is valid by seeing if the provided argument is a valid`Empty`.
140
-
It does so by examining the_structure_of`{ k: 10 }`and`class Empty { }`.
141
-
We can see that`{ k: 10 }`has _all_ of the properties that `Empty`does, because `Empty`has no properties.
142
-
Therefore, this is a valid call!
139
+
TypeScript détermine si l'appel à `fn`est valide en déterminant si l'argument fourni est un`Empty` valide.
140
+
Cela est accompli en examinant la_structure_de`{ k: 10 }`et`class Empty { }`.
141
+
Nous pouvons voir que`{ k: 10 }`a _toutes_ les propriétés d'`Empty`vu qu'`Empty`n'a aucune propriété.
142
+
C'est donc un appel valide !
143
143
144
-
This may seem surprising, but it's ultimately a very similar relationship to one enforced in nominal OOP languages.
145
-
A subclass cannot _remove_ a property of its base class, because doing so would destroy the natural subtype relationship between the derived class and its base.
146
-
Structural type systems simply identify this relationship implicitly by describing subtypes in terms of having properties of compatible types.
144
+
Cela peut paraître surprenant, mais c'est au final une relation très similaire à celle respectées dans les langages POO nominaux.
145
+
Une sous-classe ne peut pas _retirer_ une propriété de sa classe-mère, parce que faire cela détruirait la relation de sous-type naturelle existant entre la sous-classe et sa classe-mère.
146
+
Les systèmes de type structurels identifient cette relation en décrivant les sous-types de façon à avoir des propriétés à types compatibles.
147
147
148
-
#### Identical Types
148
+
#### Types identiques
149
149
150
-
Another frequent source of surprise comes with identical types:
150
+
Les types identiques sont une autre source fréquente de surprises :
151
151
152
152
```ts
153
153
classCar {
154
154
drive() {
155
-
//hit the gas
155
+
//accélérer
156
156
}
157
157
}
158
158
classGolfer {
159
159
drive() {
160
-
//hit the ball far
160
+
//frapper la balle fort
161
161
}
162
162
}
163
163
164
-
//No error?
164
+
//Pas d'erreur ?
165
165
let w:Car=newGolfer();
166
166
```
167
167
168
-
Again, this isn't an error because the _structures_of these classes are the same.
169
-
While this may seem like a potential source of confusion, in practice, identical classes that shouldn't be related are not common.
168
+
Encore une fois, ceci n'est pas une erreur parce que les _structures_de ces classes sont les mêmes.
169
+
Cela peut paraître comme une source de confusion, mais en pratique, les classes identiques n'ayant aucun rapport ne sont pas communes.
170
170
171
-
We'll learn more about how classes relate to each other in the Classes chapter.
171
+
Nous apprendrons plus sur comment les classes sont liées l'une à l'autre dans leur chapitre.
172
172
173
-
### Reflection
173
+
### Réflexivité
174
174
175
-
OOP programmers are accustomed to being able to query the type of any value, even a generic one:
175
+
Les développeurs POO ont l'habitude de pouvoir demander le type de n'importe quelle valeur, même générique :
176
176
177
177
```csharp
178
178
// C#
@@ -181,14 +181,14 @@ static void LogType<T>() {
181
181
}
182
182
```
183
183
184
-
Because TypeScript's type system is fully erased, information about e.g. the instantiation of a generic type parameter is not available at runtime.
184
+
Mais parce que le système de types de TypeScript est complètement effacé, aucune information sur, par exemple, l'instanciation d'un type générique n'est disponible à l'exécution.
185
185
186
-
JavaScript does have some limited primitives like `typeof`and`instanceof`, but remember that these operators are still working on the values as they exist in the type-erased output code.
187
-
For example, `typeof (new Car())`will be`"object"`, not `Car`or`"Car"`.
186
+
Le JavaScript possède quelques opérateurs comme `typeof`et`instanceof`, mais souvenez-vous que ces opérateurs agissent sur les valeurs, tel qu'elles existent dans le code sans informations de types.
187
+
Par exemple, `typeof (new Car())`va retourner`"object"`, et non `Car`ni`"Car"`.
188
188
189
-
## Next Steps
189
+
## Prochaines étapes
190
190
191
-
This was a brief overview of the syntax and tools used in everyday TypeScript. From here, you can:
191
+
C'était un bref résumé de la syntaxe et des outils régulièrement utilisés en TypeScript. À partir de là, vous pourrez :
192
192
193
-
-Read the full Handbook [from start to finish](/docs/handbook/intro.html) (30m)
194
-
-Explore the [Playground examples](/play#show-examples)
193
+
-Lire le Manuel [du début à la fin](/docs/handbook/intro.html) (30m)
194
+
-Explorer les [exemples du bac à sable](/play#show-examples)
0 commit comments