Microsoft a publié la version 2.2 du langage TypeScript, qui se concentre sur un nouveau type d'objet et une productivité améliorée pour les développeurs.
Dans le cadre d'une utilisation quotidienne, la version 2.2 offre un certain nombre de commodités qui devraient diminuer le temps que les développeurs passent à faire face à des erreurs basiques. Certaines fonctionnalités, telles que l'ajout d'imports manquants et la suppression des déclarations inutiles, mettent l'outillage de TypeScript au niveau des autres langages. Une erreur très fréquente en TypeScript/JavaScript est d'oublier l'utilisation correcte de this
. L'image suivante, tirée du billet annonçant l'annonce de TypeScript 2.2, illustre les nombreuses améliorations apportées à l'outillage :
Pour ceux qui utilisent Code VS, les corrections rapides sont disponibles dans VS Code 1.10 et peuvent être accessibles en utilisant la combinaison Ctrl + ..
Une amélioration très importante est la capacité d'utiliser l'indexation des chaînes de caractères de la manière à laquelle les développeurs JavaScript sont habitués. En JavaScript, une propriété d'objet peut être accédée de différentes manières :
var y = x["prop"];
var z = x.prop;
Dans cet exemple, y et z ont la même valeur, car ils accèdent à prop
de x
de deux manières valides. Avant TypeScript 2.2, un objet déclaré avec une signature d'index :
interface Foo {
// Here is a string index signature:
[prop: string]: boolean;
}
ne pouvait être accédé que via la première méthode ci-dessus. Un développeur JavaScript expérimenté ne préfèrera pas l'utilisation de l'une ou l'autre des méthodes pour accéder à une propriété. Maintenant, la version 2.2 permet à cette attitude normale de fonctionner comme prévu.
Le nouveau type d'objet peut être n'importe quoi sauf un des types de donnée primitif. Alors que la nouvelle fonctionnalité est bien accueillie, ce type supplémentaire a le potentiel de confondre les nouveaux arrivants. Cette phrase dans le message d'annonce par le directeur de programme de TypeScript Daniel Rosenwasser exige une lecture attentive pour vraiment comprendre ce que la nouvelle fonctionnalité peut faire :
object est distinct du type
{}
et des typesObject
... en raison de la compatibilité structurelle. Étant donné que le type vide ({}
) correspond également aux primitives, il ne peut pas modéliser des APIs commeObject.create
qui n'attend que des objets - pas des primitives. Par ailleurs,object
se débrouille bien en ce qu'il peut correctement rejeter d'être affecté à un numérique.
Notez que les changements de police dans ce paragraphe facilitent la compréhension lorsque nous parlons du type object spécifique et quand nous parlons du concept général d'objet. Marius Schulz a écrit un billet qui va dans plus de détails sur les différences entre les types d'objets.