TypeScript 2.4 est disponible en Release Candidate
et s'accompagne des expressions d'importation dynamique
Expressions d'importation dynamique
TypeScript 2.4 prend en charge les appels new Import () de ECMAScript. Ces appels importent un module et renvoient un Promise (une classe dont la motivation principale est d'apporter la gestion des erreurs de style synchrone au code de style Async / Callback.) � ce module.
Par exemple, imaginez une page Web qui vous permet de cr�er et d'�diter des images. Lorsque vous travaillez avec un fichier, la page vous permettra de t�l�charger imm�diatement ce fichier. Mais si vous travaillez sur plusieurs images, vous pouvez les enregistrer en tant que fichier .zip.
Vous pourriez avoir une biblioth�que d'utilit� pour cr�er un fichier zip, mais comme le t�l�chargement de plusieurs fichiers n'est pas si courant, vous voudrez charger cette fonctionnalit� paresseusement. Les expressions import () vous permettent de charger un module � la vol�e en tant que Promise comme suit
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 async function getZipFile(name: string, files: File[]): Promise<File> { const zipUtil = await import('./utils/create-zip-file'); const zipContents = await zipUtil.getContentAsBlob(files); return new File(zipContents, name); }
Microsoft assure que cette fonctionnalit� peut s�av�rer incroyablement utile dans les situations o� vous souhaitez importer des modules conditionnellement. Les projets qui utilisent des groupes comme Webpack peuvent fonctionner sur ces appels import () et diviser le code en petits paquets qui peuvent �tre charg�s en peu de temps.
Ce que tout cela signifie est que :
- vous pouvez envoyer moins de JS sur le fil pour des sc�narios plus courants ;
- vos utilisateurs peuvent obtenir des temps de chargement de page plus rapides pour du contenu critique.
Une v�rification de param�tres de rappel plus s�r
Lorsque vous v�rifiez si deux fonctions sont assignables l'une � l'autre, TypeScript v�rifie si leurs param�tres sont bidirectionnellement assignables : Microsoft l�appelle bivariance de param�tres de fonction. Il y a plusieurs raisons � cela, mais elles d�coulent principalement du caract�re structurel de TypeScript et de la fa�on dont Microsoft a essay� de faire correspondre l'intuition des gens.
D�apr�s son exp�rience, les utilisateurs ne se heurtent g�n�ralement pas � des probl�mes avec tout cela. Cependant, Microsoft a observ� que ce mod�le s'effondre face � des conteneurs qui ont transmis des donn�es internes via des rappels � en particulier des Promises. Par exemple, Promise <Animal> �tait assignable � Promise <Chien>, ce qui est incorrect. Vous pouvez voir un comportement similaire dans l'exemple suivant :
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 interface Animal { animalStuff: any } interface Dog extends Animal { bark(): void } interface BasicCollection<T> { forEach(callback: (value: T) => void): void; } declare let animalCollection: BasicCollection<Animal>; declare let dogCollection: BasicCollection<Dog>; // Ceci devrait être une erreur, mais jusquà TypeScript 2.3, le langage le permet . dogCollection = animalCollection;
Pour r�soudre ce probl�me, TypeScript 2.4 resserre d�sormais les choses et compare les param�tres qui sont notamment les rappels. Lors de la v�rification des rappels, TypeScript sera strict quant � la v�rification des param�tres de fa�on contravariante par rapport � la v�rification actuelle. La bivarit� des param�tres s'applique toujours autrement, mais Microsoft a constat� que c'�tait une v�rification de s�curit� efficace sans changer radicalement le syst�me de type.
Types faibles
Dans TypeScript 1.6, Microsoft avait ajout� une v�rification des propri�t�s exc�dentaires dans les litt�raux d'objets. Cette v�rification a cherch� des propri�t�s inattendues dans les litt�raux d'objets, et il est arriv� qu�elle attrape une grande classe de bogues. La seule lacune du contr�le �tait que si vous n'avez pas imm�diatement transmis votre objet litt�raire � quelque chose du type appropri�, le contr�le ne serait pas d�clench�.
Dans TypeScript 2.4, Microsoft ajoute une v�rification similaire pour ce qu�elle appelle les types faibles. Tout type qui contient uniquement des propri�t�s facultatives est consid�r� comme un type faible puisqu'il offre peu de restrictions sur ce qui peut lui �tre attribu�. Par exemple, ce type d'options est un type faible :
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 interface Options { data?: string, timeout?: number, maxRetries?: number, }
Dans TypeScript 2.4, il est maintenant une erreur d'attribuer n'importe quoi � un type faible lorsqu'il n'y a pas de chevauchement dans les propri�t�s. Par exemple :
Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 function sendMessage(options: Options) { // ... } const opts = { payload: "hello world!", retryOnFail: true, } // Error! sendMessage(opts); // No overlap between the type of 'opts' and 'Options' itself. // Maybe we meant to use 'data'/'maxRetries' instead of 'payload'/'retryOnFail'
�tant donn� qu'il s'agit d'un changement qui peut provoquer une rupture, vous devrez peut-�tre conna�tre les solutions de rechange identiques � celles des contr�les stricts de l'objet :
D�clarez les propri�t�s si elles existent r�ellement.
Ajoutez une signature d'index au type faible (c'est-�-dire [propName: string]: {}).
Utilisez une assertion de type (c'est-�-dire opts as Options).
Source : Microsoft
Partager