Microsoft annonce la disponibilit� de TypeScript 3.5 qui apporte une am�lioration de la vitesse,
et de nombreuses optimisations
TypeScript est un langage qui repose sur JavaScript et qui ajoute des types statiques facultatifs. Le code TypeScript est soumis � une v�rification de type pour �viter les erreurs courantes telles que les fautes de frappe et les coercitions accidentelles, puis il est transform� par le compilateur TypeScript. Le compilateur supprime toute syntaxe sp�cifique � TypeScript et transforme �ventuellement votre code pour qu'il fonctionne avec les navigateurs plus anciens, vous laissant ainsi un code JavaScript propre et lisible qui peut s'ex�cuter dans votre navigateur pr�f�r� ou dans Node.js. Au-dessus de tout cela, il existe �galement un service de langage qui utilise toutes les informations de type que TypeScript doit fournir � des fonctionnalit�s d'�dition puissantes telles que la compl�tion de code, les r�f�rences de recherche globale, les solutions rapides et les refactorings. Tout cela est multi-plateforme, multi-�diteur et open source.
TypeScript fournit �galement le m�me outil aux utilisateurs de JavaScript et peut m�me v�rifier le code JavaScript saisi avec JSDoc � l'aide de l'indicateur checkJs. Si vous avez utilis� des �diteurs tels que Visual Studio ou Visual Studio Code avec des fichiers .js, TypeScript vous permet de le faire, de sorte que vous utilisez peut-�tre d�j� TypeScript!
Am�lioration de la vitesse
TypeScript 3.5 introduit plusieurs optimisations.
V�rification de type
Une grande partie de l'expressivit� du syst�me de types a un co�t - toute t�che suppl�mentaire attendue du compilateur se traduira par des temps de compilation plus longs. Malheureusement, dans le cadre d'une correction de bogue dans TypeScript 3.4, Microsoft a accidentellement introduit une r�gression qui pourrait entra�ner une explosion du travail effectu� par le v�rificateur de type et, � son tour, du temps de v�rification du type. Cette r�gression �tait grave, non seulement parce qu'elle entra�nait des temps de build beaucoup plus longs pour le code TypeScript, mais aussi parce que les op�rations d'�dition pour les utilisateurs de TypeScript et de JavaScript �taient devenues trop lentes.
Au cours de la derni�re version, Microsoft s�est concentr� sur l'optimisation de certains chemins de code et la suppression de certaines fonctionnalit�s au point que TypeScript 3.5 est en r�alit� plus rapide que TypeScript 3.3 pour de nombreuses v�rifications incr�mentielles. Non seulement les temps de compilation ont-ils diminu� par rapport � 3.4, mais la compl�tion du code et toutes les autres op�rations de l'�diteur devraient �galement �tre beaucoup plus rapides.
am�liorations --incremental
TypeScript 3.4 a introduit une nouvelle option compilateur --incremental. Cette option enregistre de nombreuses informations dans un fichier .tsbuildinfo, qui peut �tre utilis� pour acc�l�rer les prochains appels � tsc.
TypeScript 3.5 inclut plusieurs optimisations pour la mise en cache. Dans des sc�narios impliquant des centaines de projets utilisant les r�f�rences de projet TypeScript en mode --build, Microsoft a constat� que le temps n�cessaire � une rebuild peut �tre r�duit de 68% par rapport � TypeScript 3.4.
Le type d'assistance Omit
La plupart du temps, nous voulons cr�er un objet qui omet certaines propri�t�s. Il s�av�re que nous pouvons exprimer de tels types comme ceux qui utilisent les aides int�gr�es � TypeScript Pick et Exclude. Par exemple, si nous voulions d�finir une Person qui n�a pas de propri�t� location, nous pourrions �crire ce qui suit:
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 type Person = { name: string; age: number; location: string; }; type RemainingKeys = Exclude<keyof Person, "location">; type QuantumPerson = Pick<Person, RemainingKeys>; // equivalent to type QuantumPerson = { name: string; age: number; };
Ici, nous avons "soustrait" "location" de l'ensemble des propri�t�s de Person � l'aide du type d'assistance Exclude. Nous les avons ensuite s�lectionn�s directement aupr�s de Person en utilisant le type d�assistant Pick.
Il s'av�re que ce type d'op�ration est assez fr�quent pour que les utilisateurs �crivent un type d'assistance pour faire exactement cela:
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
Au lieu de laisser chacun d�finir sa propre version d'Omit, TypeScript 3.5 inclura sa propre version dans lib.d.ts, qui peut �tre utilis�e n'importe o�. Le compilateur lui-m�me utilisera ce type Omit pour exprimer des types cr��s via des d�clarations de d�structuration d'objet sur des g�n�riques.
Am�lioration des contr�les de propri�t� exc�dentaire dans les types d'union
TypeScript a une fonctionnalit� appel�e excess property checking qui v�rifie les litt�raux d'objet. Cette fonctionnalit� est destin�e � d�tecter les fautes de frappe lorsqu'un type n'attend pas une propri�t� sp�cifique.
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 type Style = { alignment: string, color?: string }; const s: Style = { alignment: "center", colour: "grey" // ^^^^^^ error! };
Dans TypeScript 3.4 et les versions ant�rieures, certaines propri�t�s excessives �taient autoris�es dans des situations o� elles n�auraient pas d� l��tre. Par exemple, TypeScript 3.4 autorisait la propri�t� incorrecte name dans le litt�ral d'objet m�me si ses types ne correspondent pas entre Point et Label.
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 type Point = { x: number; y: number; }; type Label = { name: string; }; const thing: Point | Label = { x: 0, y: 0, name: true // uh-oh! };
Auparavant, une union non discrimin�e ne subissait aucune v�rification de propri�t� exc�dentaire sur ses membres et, par cons�quent, la propri�t� name mal typ�e glissait entre les mailles.
Dans TypeScript 3.5, le v�rificateur de type v�rifie au moins que toutes les propri�t�s fournies appartiennent � un membre de l'union et ont le type appropri�, ce qui signifie que l'exemple ci-dessus g�n�re correctement une erreur.
Notez que le chevauchement partiel est toujours autoris� tant que les types de propri�t� sont valides.
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 const pl: Point | Label = { x: 0, y: 0, name: "origin" // okay };
Le drapeau --allowUmdGlobalAccess
Dans TypeScript 3.5, vous pouvez maintenant r�f�rencer des d�clarations globales UMD telles que
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part export as namespace foo;
de n'importe o� - m�me des modules - en utilisant le nouvel indicateur --allowUmdGlobalAccess.
V�rification plus intelligente du type d'union
Lors de la v�rification des types d'union, TypeScript compare g�n�ralement chaque type de constituant de mani�re isol�e. Par exemple, prenons le code suivant:
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 type S = { done: boolean, value: number } type T = | { done: false, value: number } | { done: true, value: number }; declare let source: S; declare let target: T; target = source;
L'affectation de source � target implique de v�rifier si le type de source est assignable � target. Cela signifie que TypeScript doit v�rifier si S
{ done: boolean, value: number }est assignable � T
{ done: false, value: number } | { done: true, value: number }Avant TypeScript 3.5, la v�rification de cet exemple sp�cifique �chouait, car S n�est pas assignable � { done: false, value: number } ni � { done: true, value: number }. Pourquoi? Parce que la propri�t� done dans S n�est pas assez sp�cifique, c�est une valeur bool�enne alors que chaque composant de T a une propri�t� done sp�cifiquement vraie ou fausse. C�est ce que Microsoft voulait dire par v�rification individuelle de chaque type de composant: TypeScript ne fait pas que r�unir chaque propri�t� et voir si S est assignable � cette propri�t�. Si tel �tait le cas, un code incorrect pourrait passer comme ceci:
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 interface Foo { kind: "foo"; value: string; } interface Bar { kind: "bar"; value: number; } function doSomething(x: Foo | Bar) { if (x.kind === "foo") { x.value.toLowerCase(); } } // uh-oh - luckily TypeScript errors here! doSomething({ kind: "foo", value: 123, });
Il est donc clair que ce comportement convient � certains cas. TypeScript a-t-il �t� utile dans l'exemple d'origine? Pas vraiment. Si vous d�terminez le type pr�cis de toute valeur possible de S, vous constaterez qu�elle correspond exactement aux types de T.
C�est pourquoi, dans TypeScript 3.5, lors de l�attribution de types � propri�t�s discriminantes comme dans T, le langage ira plus loin et d�composera les types tels que S en une union de tous les types possibles. Dans ce cas, puisque boolean est une union de true et de false, S sera consid�r� comme une union de { done: false, value: number } et { done: true, value: number }.
Source : Microsoft
Partager