
Le langage continue de compléter son système de typage

Une nouvelle version du compilateur TypeScript vient de sortir. Ce surensemble typé de JavaScript poursuit sa maturation en proposant toujours plus de possibilités tant au niveau de la syntaxe qu’au niveau de son intégration avec les environnements de développement.
Pour installer cette nouvelle version, il vous suffit de taper la commande suivante :
npm install -g typescript
Il convient de s’assurer que votre environnement de développement prend bien en compte cette nouvelle version.
import() typé
Il est désormais possible d’utiliser l’importation de type en plein milieu du code. Il n’est donc plus obligatoire de réaliser l’importation en début de module.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | // foo.ts export interface Person { name: string; age: number; } // bar.ts export function greet(p: import("./foo").Person) { return ` Hello, I'm ${p.name}, and I'm ${p.age} years old. `; } |
Inférence de types à partir de JSON
L’inférence de types peut désormais s’appliquer aux fichiers JSON importés, ce qui permet entre autres de détecter des erreurs de typage lors de modifications de valeurs sur les propriétés de l’objet JSON. Ce comportement est optionnel et doit s’activer avec le paramètre resolveJsonModule dans le fichier tsconfig.json. À noter aussi que ce comportement ne s’applique qu’avec une résolution de module de type node (paramètre "module" = "commonjs")
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // ./tsconfig.json { "compilerOptions": { "module": "commonjs", "resolveJsonModule": true, "esModuleInterop": true } } // ./src/settings.json { "dry": false, "debug": false } // ./src/foo.ts import settings from "./settings.json"; settings.debug === true; // Okay settings.dry === 2; // Error! Can't compare a `boolean` and `number` |
Généricité pour les étiquettes des patrons de chaîne (tagged template strings)
La version 2.9 permet d’utiliser des fonctions génériques pour les étiquettes de patrons de chaînes, fonctions auxquelles il est possible de fournir des paramètres de type.
Code : | Sélectionner tout |
1 2 3 | declare function tag<T>(strs: TemplateStringsArray, ...args: T[]): T; let a = tag<string | number> `${100} ${"hello"}`; |
Support des symboles et des numériques pour keyof
Le mot-clé keyof ne pouvait récupérer que les propriétés dont le nom était un littéral alphanumérique. Il peut à présent renvoyer les propriétés dont le nom est un numérique (par exemple les indices d’un tableau) ou même un symbole (symbol).
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | const baz = Symbol("baz"); interface Thing { foo: string; bar: number; [baz]: boolean; // this is a computed property type } // Error in TypeScript 2.8 and earlier! // `typeof baz` isn't assignable to `"foo" | "bar"` let x: keyof Thing = baz; |
Enfin, parmi les nouveautés majeures dans cette version de TypeScript, mentionnons que le renommage ou le déplacement des fichiers sources dans un projet peut entraîner la mise à jour des références à ces fichiers sources dans les instructions import. Toutefois, tous les éditeurs ne prennent pas encore en compte cette possibilité.
Source : blog Microsoft


Voir aussi :


Vous avez lu gratuitement 7 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.