BT

Accueil InfoQ Actualités TypeScript 3.8 Ajoute Les Champs Privés Et Top-Level Await

TypeScript 3.8 Ajoute Les Champs Privés Et Top-Level Await

This item in japanese

Favoris

L'équipe TypeScript a annoncé la version 3.8 de TypeScript, qui comprend les importations et exportations de type uniquement, les champs privés et top-level await.

Bien que l'importation et l'exportation de types fonctionnent souvent en raison de l'élision de l'importation, une ambiguïté s'est produite lorsqu'il n'était pas clair s'il s'agissait d'un type ou d'une valeur importé. Les instructions d'importation qui ne contenaient que des importations utilisées comme types seraient éliminées par l'élision d'importation de TypeScript. Pour contourner ces problèmes, TypeScript 3.8 ajoute une nouvelle syntaxe pour l'importation et l'exportation de types :

import type { SomeThing } from "./some-module.js";
export type { SomeThing };

L'instruction import type n'importe que les déclarations à utiliser pour les annotations de type et les déclarations et est toujours entièrement effacée lors de la transpilation. La commande export type ne permet d'exporter que pour les contextes de type, et s'efface également de la sortie de TypeScript. Lorsque vous utilisez la commande import type pour importer une classe, la classe ne peut pas être étendue.

Le compilateur TypeScript introduit un nouveau flag, importsNotUsedAsValues​​, pour déterminer ce qui arrive aux importations non utilisées au moment de l'exécution. Les valeurs de cet indicateur, remove, preserve ou error, permettent aux développeurs de mieux contrôler l'importation et l'exportation de types.

La proposition de champs privés d'ECMAScript a récemment atteint l'étape 3, grâce aux efforts importants de Bloomberg et de l'équipe TypeScript.

Les champs privés commencent par un caractère # et leur portée est limitée à la classe qui les contient. Les modificateurs TypeScript comme public ou private ne peuvent pas être utilisés sur des champs privés. Les champs privés ne peuvent pas être consultés ou détectés en dehors de la classe qui les contient.

Les champs privés sont différents du mot clé private de TypeScript. Comme l'explique Daniel Rosenwasser, responsable de programme de l'équipe TypeScript :

En ce qui concerne les propriétés, les modificateurs private de TypeScript sont entièrement effacés - ce qui signifie que pendant que les données seront là, rien n'est encodé dans le JavaScript de sortie sur la façon dont la propriété a été déclarée. Au moment de l'exécution, il agit entièrement comme une propriété normale. Cela signifie que lorsque vous utilisez le mot-clé private, la confidentialité n'est appliquée qu'au moment de la compilation/conception, et pour les utilisateurs JavaScript, elle est entièrement basée sur l'intention. L'avantage est que ce type de «soft privacy» peut aider vos utilisateurs à contourner temporairement le fait de ne pas avoir accès à certaines API, et fonctionne dans n'importe quel runtime. D'un autre côté, les # privés d'ECMAScript sont complètement inaccessibles en dehors de la classe.

Notez que TypeScript ne prend actuellement en charge que la transpilation des champs privés vers ES6 et versions ultérieures, car l'implémentation rétrocompatible exploite WeakMaps, tandis que le mot clé private fonctionne jusqu'à ES3.

ECMAScript 2020 ajoute la syntaxe export * pour exposer tous les membres d'un module comme un seul membre. Auparavant, les développeurs devaient utiliser cette syntaxe :

import * as utilities from "./utilities.js";
export { utilities };

Avec ECMAScript 2020 et TypeScript 3.8, cela est réduit à :

export * as utilities from "./utilities.js";

L'introduction des promises dans ES6 a permis de jeter les bases d'un meilleur traitement asynchrone avec JavaScript, mais a entraîné de nombreuses fonctionnalités supplémentaires au cours des cinq années qui ont suivi sa sortie initiale, comme async/await. Le dernier ajout est le top-level await, qui permet d'utiliser await au niveau supérieur d'un module.

Top-level await est désormais également prise en charge par TypeScript 3.7. Cela ne peut être transpilé que vers ES2017 et les environnements plus récents, et le support des modules est le esnext ou le system, car il nécessite un environnement avec le support du module ES.

TypeScript 3.8 prend désormais en charge es2020 comme cible de transpilation et option de module. Ce mode préserve les fonctionnalités ES2020 ajoutées dans TypeScript 3.7 et 3.8.

La version TypeScript 3.8 améliore sa prise en charge de l'observation des répertoires et ajoute un nouveau champ de configuration du compilateur watchOptions. Ces options permettent aux développeurs de mieux contrôler la façon dont les répertoires et les fichiers sont surveillés, améliorant ainsi les performances et la fiabilité lors de la modification des node_modules.

Le champ watchOptions propose quatre nouvelles options : watchFile, watchDirectory, fallbackPolling et synchronousWatchDirectory, chacun ayant plusieurs options de configuration pour la fréquence de vérification des fichiers et des répertoires.

Le compilateur TypeScript 3.8 comprend également une nouvelle option d'optimisation des performances du compilateur, assumeChangesOnlyAffectDirectDependencies, qui indique à TypeScript uniquement de revérifier et de reconstruire les fichiers modifiés ainsi que les fichiers qui les importent directement.

Avec chaque version de TypeScript, le compilateur introduit des changements qui induisent une rupture à mesure que ses capacités de vérification de type s'améliorent. Dans TypeScript 3.8, le compilateur ajoute des vérifications d'affectation plus strictes aux unions avec des signatures d'index.

Dans la communauté TypeScript, après deux TSConf événements à Seattle en 2018 et 2019, le premier TSConf Japan et TSConf.eu ont lieu en février et mars.

TypeScript est open source disponible sous la licence Apache 2. Les contributions et commentaires sont encouragés via le projet TypeScript GitHub et doivent suivre les guidelines de contribution TypeScript et le code de conduite open source Microsoft.

 

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

BT

Votre profil est-il à jour? Merci de prendre un instant pour vérifier.

Note: en cas de modification de votre adresse email, une validation sera envoyée.

Nom de votre entreprise:
Rôle dans votre entreprise:
Taille de votre entreprise:
Pays/Zone:
État/Province/Région:
Vous allez recevoir un email pour confirmer la nouvelle adresse email. Ce pop-up va se fermer de lui-même dans quelques instants.