Conformément à son calendrier, Microsoft a rendu disponible la version 2.1 de TypeScript. Voici quelques nouveautés.Fonctions asynchrones :
Cette version de TypeScript apporte les fonctions asynchrones de bas niveau. Les développeurs seront désormais capable d’utiliser async/await et cibler ES3/ES5 sans avoir à utiliser des outils supplémentaires.
Les restes et les extensions d’objets :
Ces objets font partie d’une nouvelle proposition pour ES2017 (ECMA Script 2017) visant à faciliter la copie, la fusion et la séparation partielles des objets. La fonctionnalité est déjà appelée lors de l'utilisation de bibliothèques comme Redux.
Avec les extensions d'objet, la création d'une copie superficielle d'un objet a grandement été simplifiée :
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 7 | let copy = { ...original }; De même, il est possible de fusionner différents objets. Dans cet exemple, nous avons des propriétés de foo, bar et baz. let merged = { ...foo, ...bar, ...baz }; |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 | let nowYoureHavingTooMuchFun = { hello: 100, ...foo, world: 200, ...bar, } |
Les restes d'objet sont complémentaires aux extensions d’objets dans la mesure où ils peuvent extraire toutes les propriétés supplémentaires qui ne sont pas obtenues en déstructurant un élément :
| Code TypeScript : | Sélectionner tout |
let { a, b, c, ...defghijklmnopqrstuvwxyz } = alphabet;
Les types keyof et Lookup
Nombreuses sont les bibliothèques qui tirent profit du fait que les objets sont (pour la plupart) une collection de valeurs. Étant donné que TypeScript connaît les propriétés de chaque valeur, il existe un ensemble de chaînes de caractères connues (ou clés) que vous pouvez utiliser pour les recherches. C’est ici qu’intervient l’opérateur keyof :
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 7 | interface Person { name: string; age: number; location: string; } let propName: keyof Person; |
| Code TypeScript : | Sélectionner tout |
let propName: "name" | "age" | "location";
Les types d’accès indexés, également appelés types lookup, ressemblent dans leur syntaxe à un accès à un élément, mais sont écrits comme des types :
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 7 | interface Person { name: string; age: number; location: string; } let a: Person["age"]; |
| Code TypeScript : | Sélectionner tout |
let a: number;
| Code TypeScript : | Sélectionner tout |
1 2 | // Equivalent to the type 'string | number' let nameOrAge: Person["name" | "age"]; |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | function get<T, K extends keyof T>(obj: T, propertyName: K): T[K] { return obj[propertyName]; } let x = { foo: 10, bar: "hello!" }; let foo = get(x, "foo"); // has type 'number' let bar = get(x, "bar"); // has type 'string' let oops = get(x, "wargarbl"); // error! |
Disons que nous avons un type Person
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 | interface Person { name: string; age: number; location: string; } |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 | interface PartialPerson { name?: string; age?: number; location?: string; } |
De même, nous pourrions vouloir créer un type apparenté à Person où toutes les propriétés sont booléennes
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 | interface BooleanifiedPerson { name: boolean; age: boolean; location: boolean; } |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 | interface FrozenPerson { readonly name: string; readonly age: number; readonly location: string; } |
Voici comment nous pouvons écrire BooleanifiedPerson avec un type mappé.
| Code TypeScript : | Sélectionner tout |
1 2 3 | type BooleanifiedPerson = { [P in "name" | "age" | "location"]: boolean }; |
Il est possible d’utiliser l’opérateur keyof pour réduire le code
| Code TypeScript : | Sélectionner tout |
1 2 3 | type BooleanifiedPerson = { [P in keyof Person]: boolean }; |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 | type Booleanify<T> = { [P in keyof T]: boolean }; type BooleanifiedPerson = Booleanify<Person>; |
| Code TypeScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | // Keep types the same, but make every property optional. type Partial<T> = { [P in keyof T]?: T[P]; }; // Keep types the same, but make each property to be read-only. type Readonly<T> = { readonly [P in keyof T]: T[P]; }; |
Vous avez lu gratuitement 3 753 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.