L’importation et l’exportation de types uniquement
Avec les versions antérieures de TypeScript, l’importation et l’exportation de types fonctionnent avec l’élision des importations. Mais, il y a une ambiguïté qui survient lorsqu'il n'est pas clair s'il s'agit d'un type ou d'une valeur qui est importée. De plus, les déclarations d'importation qui ne contiennent que des importations utilisées comme types sont éliminées par l'élision d'importation de TypeScript. Pour contourner ces problèmes, TypeScript 3.8 ajoute désormais une nouvelle syntaxe pour l'importation et l'exportation des types uniquement. TypeScript 3.8 réutilise la syntaxe d'importation de JavaScript afin de vous permettre de référencer les types. Voici à quoi cela ressemble :
Code : | Sélectionner tout |
1 2 | import type { SomeThing } from "./some-module.js"; export type { SomeThing }; |
Cela sert à déterminer ce qu'il advient des importations non utilisées au moment de l'exécution. Les valeurs de ce drapeau, “remove”, “preserve” ou “error”, permettent aux développeurs de mieux contrôler l'importation et l'exportation des types.
Les champs privés ECMAScript
TypeScript 3.8 prend en charge les champs privés d'ECMAScript, qui font partie de la proposition de champs de classe de stade 3. Les champs privés commencent par un caractère # et sont uniquement limités à leur classe de contenu. Les modificateurs TypeScript comme public ou private ne peuvent pas être utilisés sur les champs privés. De même, les champs privés ne peuvent pas être accédés ou détectés en dehors de la classe qui les contient.
Ils sont différents du mot clé “privé” de TypeScript. La prise en charge de ces champs n’est pas encore totale. Selon Microsoft, TypeScript ne prend actuellement en charge que la transposition des champs privés vers ES6 et plus. L'implémentation rétrocompatible exploite les WeakMaps, alors que le mot clé “privé” fonctionne de nouveau vers ES3.
La syntaxe export * as ns
TypeScript 3.8 introduit la syntaxe export * de la norme ECMAScript 2020 permettant d’exposer tous les membres d'un module comme un seul membre.
En outre, TypeScript 3.8 prend désormais en charge ES2020 comme cible de transpilation et option de module. Il préserve les fonctionnalités ES2020 ajoutées dans TypeScript 3.7 et 3.8. La version 3.8 de TypeScript améliore son support de surveillance des répertoires et ajoute un nouveau champ de configuration du compilateur watchOptions. Cela donne aux développeurs un plus grand contrôle sur la façon dont les répertoires et les fichiers sont surveillés, améliorant les performances et la fiabilité du travail avec les modifications apportées aux node_modules.
Le champ watchOptions offre quatre nouvelles options : watchFile, watchDirectory, fallbackPolling et synchronousWatchDirectory, chacune d'entre elles ayant plusieurs options de configuration pour la fréquence de vérification des fichiers et des répertoires. Pour finir, le compilateur de TypeScript 3.8 ajoute une autre option d'optimisation des performances, assumeChangesOnlyAffectDirectDependencies, qui indique à TypeScript de ne vérifier et reconstruire que les fichiers qui ont été modifiés ainsi que les fichiers qui les importent directement.
Pour chaque version de TypeScript, le compilateur introduit des modifications de rupture à mesure que ses capacités de vérification de type s'améliorent. Dans TypeScript 3.8, le compilateur ajoute des contrôles d'assignabilité plus stricts aux unions avec des signatures d'index.
Source : Microsoft
Et vous ?
Que pensez-vous des nouveautés dans TypeScript 3.8 ?
Voir aussi
TypeScript 3.8 RC apporte une nouvelle syntaxe pour l'importation/exportation de types uniquement, ainsi que les champs privés ECMAScript
La version stable de TypeScript 3.7.0 est disponible et apporte diverses fonctionnalités et quelques améliorations au langage
La version bêta de TypeScript 3.7.0 est disponible avec la prise en charge de l'opérateur de chaînage d'optionnels (?.) et l'opérateur (??)
TypeScript 3.6 est disponible et apporte le support de import.meta dans SystemJS et des API qui prennent en charge --build et --incremental