La version bêta de TypeScript 4.2 est disponible avec le type tuple plus amélioré
et une préservation plus intelligente des alias de type

Dans un article publié sur son blog ce 12 janvier, Microsoft a annoncé la version bêta de TypeScript 4.2. « Aujourd'hui, nous sommes heureux d'annoncer la disponibilité de la version bêta de TypeScript 4.2! Pour commencer à l’utiliser, vous pouvez vous rendre sur NuGet, ou utiliser la commande suivante : npm install typescript@beta », a déclaré Daniel Rosenwasser, le responsable TypeScript chez Microsoft.

Notons que npm permet aux développeurs JavaScript de partager et de réutiliser facilement le code. Il facilite la mise à jour du code et est distribué avec Node.js. Considéré comme l'une des technologies au cœur du World Wide Web, JavaScript est un langage de programmation permettant de rendre les pages Web interactives. Il permet d’effectuer une validation de formulaire, d’appliquer des animations et de créer des événements. Un grand nombre de sites web l'utilisent, et la plupart des navigateurs disposent d'un moteur JavaScript dédié pour l'interpréter.

Nom : typescriptB.png
Affichages : 72020
Taille : 44,5 Ko

TypeScript est un langage de programmation libre et open source développé par Microsoft qui a pour but d'améliorer et de sécuriser la production de code JavaScript. Il s'agit d'un sur-ensemble du JavaScript qui apporte un typage statique et optionnel des variables. Il permet de détecter certaines erreurs en amont et se compile en JavaScript pour une utilisation côté navigateur ou côté serveur à l'aide de NodeJS. Il présente plusieurs avantages :

  • la prévention des bogues et la maintenabilité du code ;
  • la prise en charge des interfaces, des sous-interfaces, des classes, des sous-classes ;
  • la capacité de programmer en orienté objet avec l’héritage des membres privés et des interfaces.

Nouveautés apportées par TypeScript 4.2

Préservation plus intelligente des alias de type

Pour présenter les limites observées avec la précédente version de TypeScript, notamment lors de l’utilisation des heuristiques permettant de savoir quand et comment afficher les alias de type, Microsoft a exploité l’extrait de code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
export type BasicPrimitive = number | string | boolean;
 
export function doStuff(value: BasicPrimitive) {
    let x = value;
    return x;
}
Microsoft démontre que si on passe la souris sur x dans un éditeur tel que Visual Studio, on obtient un panneau d'informations rapide qui affiche le type BasicPrimitive. De même, si nous observons la sortie du fichier de déclaration (.d.ts output), TypeScript indiquera que doStuff renvoie BasicPrimitive.

En examinant le cas où nous retournons un BasicPrimitive ou un undefined comme dans l’exemple ci-dessous, Daniel Rosenwasser et l’équipe TypeScript demontrent que : alors qu’on se serait attendu à ce que TypeScript affiche le type de retour de doStuff comme BasicPrimitive ou undefined, il affiche plutôt string | number | boolean | undefined!

L’équipe TypeScript a également fait le constat suivant : lorsqu’on crée l'union à partir d'un ou plusieurs types d'union, il normalise toujours ces types en un nouveau type d'union avec des pertes d’informations. Le vérificateur de type n'avait donc aucun moyen de savoir d'où venait string | number | boolean.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
export type BasicPrimitive = number | string | boolean;
 
export function doStuff(value: BasicPrimitive) {
    if (Math.random() < 0.5) {
        return undefined;
    }
 
    return value;
}
Dans l’annonce publiée sur le blog de Microsft, Daniel Rosenwasser précise que les paramètres internes sont un peu plus intelligents avec TypeScript 4.2. « Nous gardons une trace de la façon dont les types ont été construits en conservant des parties de leur structure d'origine avant de les normaliser. Nous gardons également une trace des alias de type et les différences entre instances d’alias », indique-t-il. « Le fait de pouvoir afficher les types en fonction de la façon dont vous les avez utilisés dans votre code signifie que vous pouvez éviter l'affichage de certains types. Ce qui se traduit souvent par une meilleure sortie des fichiers .d.ts, des messages d'erreur, un affichage des types dans l'éditeur sous forme d'info-bulles et d'aide à la signature », a-t-il ajouté.

Les éléments de type tuple

De façon générale, à partir des types de base (int, float, …), il est possible d’en élaborer de nouveaux. On parle alors de types construits. Un exemple de type construit est le tuple. Il permet de créer une collection ordonnée de plusieurs éléments. Les tuples ressemblent aux listes. Ils ne sont plus modifiables une fois qu’ils sont créés ; on dit qu’un tuple n’est pas mutable. Dans TypeScript, les types tuple sont destinés à modéliser des tableaux avec des longueurs et des types d'éléments spécifiques.

Un tuple qui stock une paire de nombres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
let a: [number, number] = [1, 2];
Un tuple qui stock une chaîne, un nombre, et un booléen
Code : Sélectionner tout - Visualiser dans une fenêtre à part
let b: [string, number, boolean] = ["hello", 42, true];
Les types tuple de TypeScript sont plus perfectionnés, car ils sont également utilisés pour modéliser des éléments tels que des listes de paramètres en JavaScript. Ils peuvent ainsi avoir des éléments optionnels et des éléments de base, et peuvent même avoir des étiquettes pour la lisibilité. Dans la version bêta de TypeScript 4.2, les éléments de base peuvent désormais se retrouver n'importe où dans un tuple. La seule restriction est que cela ne peut se faire que lorsqu'il n'est pas suivi d'un autre élément optionnel ou d'un élément de base. En d'autres termes, un seul élément de base par tuple, et aucun élément optionnel après les éléments de base

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
let foo: [...string[], number];
 
foo = [123];
foo = ["hello", 123];
foo = ["hello!", "hello!", "hello!", 123];
 
let bar: [boolean, ...string[], boolean];
 
bar = [true, false];
bar = [true, "some text", false];
bar = [true, "some", "separated", "text", false];
Parmi les autres nouveautés apportées par TypeScript 4.2, nous pouvons citer :

  • Un contrôle plus strict pour l'opérateur in
    En JavaScript, l'utilisation d'un type non-objet sur le côté droit de l'opérateur in entraîne une erreur d'exécution. TypeScript 4.2 garantit que cette erreur peut être détectée au moment de la conception ;
  • --noPropertyAccessFromIndexSignature
    L’un des facteurs ayant facilité la transition du code JavaScript vers TypeScript est l’utilisation des « propriétés à point » comme syntaxe d'accès aux propriétés comme dans personne.nom. Partant du constat que les utilisateurs préfèrent recevoir un message d'erreur lorsque l’accès à une telle propriété ne correspond pas à une déclaration de propriété spécifique, Microsoft a introduit un nouvel indicateur appelé –noPropertyAccessFromIndexSignature ;
  • Signatures des constructeurs abstraits
    TypeScript permet d’indiquer une classe comme étant abstraite. Libeller une classe comme étant abstraite indique que la classe est uniquement destinée à être étendue. Avec TypeScript 4.2, on peut spécifier un modificateur abstrait sur les signatures des constructeurs. L'ajout d’un modificateur abstrait à une signature de constructeur signale que l’on peut agir sur les constructeurs abstraits ;
  • --explainFiles : pour comprendre pourquoi des fichiers ont été inclus dans un programme
    Selon un retour d’expériences utilisateur, une question étonnamment courante chez les utilisateurs de TypeScript est de se demander « pourquoi un fichier quelconque est inclus dans TypeScrip ? » TypeScript 4.2 apporte –explainFiles qui donne une sortie très détaillée sur la raison pour laquelle un fichier s'est retrouvé dans un programme. Pour le lire plus facilement, on peut transférer la sortie vers un fichier ou la diriger vers un programme qui pourra facilement l'afficher.

Microsoft dit être encore dans une phase initiale avec cette version bêta. Elle n'est pas encore stable et pourrait comporter quelques bogues. L’entreprise compte sur un retour d’expériences de ses utilisateurs pour produire une excellente version.

Source: Microsoft

Et vous ?

Quelle est votre expérience avec TypeScript ?

Voir aussi:

Quels sont les frameworks JavaScript que vous aimeriez apprendre en 2020 ? Voici quelques propositions qui sont tributaires des cas d'utilisations

Quels sont les coûts liés à l'utilisation de frameworks JavaScript pour le développement Web ? Une analyse des sites utilisant React, Vue.js ou Angular

Microsoft annonce Playwright pour le langage Python, permettant de tester les applications Web et qui fonctionne dans tous les principaux navigateurs

Quels sont les meilleurs langages de programmation pour développer une application mobile ? Petit tour d'horizon sur les plus populaires

Visual Basic : Microsoft annonce qu'il va assurer la prise en charge du langage sur .Net 5, mais ne le fera plus évoluer pour rester compatible avec le .Net Framework