IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

Microsoft annonce la disponibilit� de TypeScript 3.5 qui apporte une am�lioration de la vitesse


Sujet :

TypeScript

  1. #1
    Chroniqueur Actualit�s

    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Mars 2013
    Messages
    9 483
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Mars 2013
    Messages : 9 483
    Par d�faut Microsoft annonce la disponibilit� de TypeScript 3.5 qui apporte une am�lioration de la vitesse
    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
    };

    Nom : typescript.png
Affichages : 4232
Taille : 116,9 Ko

    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
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et R�digez des actualit�s

  2. #2
    Expert confirm�

    Homme Profil pro
    Directeur des syst�mes d'information
    Inscrit en
    Avril 2002
    Messages
    2 887
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 65
    Localisation : Luxembourg

    Informations professionnelles :
    Activit� : Directeur des syst�mes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 887
    Par d�faut
    Clairement bien plus rapide, un exemple de bench :

    3.4.5:

    Files: 231
    Lines: 90219
    Nodes: 293512
    Identifiers: 90745
    Symbols: 281948
    Types: 196634
    Memory used: 827902K
    I/O Read time: 0.02s
    Parse time: 0.49s
    Program time: 0.68s
    Bind time: 0.47s
    Check time: 9.57s
    transformTime time: 0.47s
    Source Map time: 0.04s
    commentTime time: 0.06s
    printTime time: 0.96s
    Emit time: 0.96s
    I/O Write time: 0.09s
    Total time: 11.67s

    Files: 290
    Lines: 94279
    Nodes: 308461
    Identifiers: 93034
    Symbols: 267450
    Types: 175907
    Memory used: 686622K
    I/O Read time: 0.02s
    Parse time: 0.11s
    Program time: 0.46s
    Bind time: 0.09s
    Check time: 11.19s
    transformTime time: 0.41s
    Source Map time: 0.03s
    commentTime time: 0.04s
    printTime time: 0.88s
    Emit time: 0.89s
    I/O Write time: 0.10s
    Total time: 12.63s

    Files: 151
    Lines: 87932
    Nodes: 280111
    Identifiers: 87042
    Symbols: 174293
    Types: 131408
    Memory used: 455988K
    I/O Read time: 0.00s
    Parse time: 0.05s
    Program time: 0.19s
    Bind time: 0.04s
    Check time: 5.75s
    transformTime time: 0.06s
    Source Map time: 0.01s
    commentTime time: 0.01s
    printTime time: 0.17s
    Emit time: 0.17s
    I/O Write time: 0.02s
    Total time: 6.14s

    Files: 260
    Lines: 86669
    Nodes: 281352
    Identifiers: 84277
    Symbols: 195604
    Types: 146293
    Memory used: 713362K
    I/O Read time: 0.00s
    Parse time: 0.03s
    Program time: 0.17s
    Bind time: 0.02s
    Check time: 6.26s
    transformTime time: 0.08s
    Source Map time: 0.01s
    commentTime time: 0.01s
    printTime time: 0.23s
    Emit time: 0.23s
    I/O Write time: 0.04s
    Total time: 6.69s

    Files: 77
    Lines: 41241
    Nodes: 178871
    Identifiers: 60199
    Symbols: 55477
    Types: 19202
    Memory used: 739169K
    I/O Read time: 0.00s
    Parse time: 0.00s
    Program time: 0.03s
    Bind time: 0.00s
    Check time: 0.53s
    transformTime time: 0.00s
    commentTime time: 0.00s
    printTime time: 0.00s
    Emit time: 0.00s
    Source Map time: 0.00s
    I/O Write time: 0.00s
    Total time: 0.56s

    3.5.1:

    Files: 231
    Lines: 90476
    Nodes: 293739
    Identifiers: 90811
    Symbols: 328585
    Types: 120096
    Memory used: 312909K
    Assignability cache size: 95773
    Identity cache size: 270
    Subtype cache size: 3185
    I/O Read time: 0.03s
    Parse time: 0.49s
    Program time: 0.68s
    Bind time: 0.29s
    Check time: 4.97s
    transformTime time: 0.43s
    Source Map time: 0.02s
    commentTime time: 0.06s
    printTime time: 0.87s
    Emit time: 0.88s
    I/O Write time: 0.06s
    Total time: 6.82s

    Files: 290
    Lines: 94536
    Nodes: 308688
    Identifiers: 93100
    Symbols: 238583
    Types: 86420
    Memory used: 409653K
    Assignability cache size: 78954
    Identity cache size: 244
    Subtype cache size: 2280
    I/O Read time: 0.01s
    Parse time: 0.07s
    Program time: 0.31s
    Bind time: 0.07s
    Check time: 4.39s
    transformTime time: 0.32s
    Source Map time: 0.02s
    commentTime time: 0.04s
    printTime time: 0.71s
    Emit time: 0.72s
    I/O Write time: 0.14s
    Total time: 5.48s

    Files: 151
    Lines: 88189
    Nodes: 280338
    Identifiers: 87108
    Symbols: 159491
    Types: 76117
    Memory used: 518522K
    Assignability cache size: 62635
    Identity cache size: 60
    Subtype cache size: 517
    I/O Read time: 0.01s
    Parse time: 0.05s
    Program time: 0.20s
    Bind time: 0.03s
    Check time: 2.03s
    transformTime time: 0.06s
    Source Map time: 0.01s
    commentTime time: 0.01s
    printTime time: 0.13s
    Emit time: 0.13s
    I/O Write time: 0.02s
    Total time: 2.38s

    Files: 260
    Lines: 86926
    Nodes: 281579
    Identifiers: 84343
    Symbols: 191267
    Types: 78969
    Memory used: 645348K
    Assignability cache size: 67758
    Identity cache size: 104
    Subtype cache size: 444
    I/O Read time: 0.02s
    Parse time: 0.03s
    Program time: 0.15s
    Bind time: 0.02s
    Check time: 2.25s
    transformTime time: 0.06s
    Source Map time: 0.01s
    commentTime time: 0.01s
    printTime time: 0.16s
    Emit time: 0.16s
    I/O Write time: 0.03s
    Total time: 2.58s

    Files: 77
    Lines: 41498
    Nodes: 179098
    Identifiers: 60265
    Symbols: 55621
    Types: 16909
    Memory used: 675512K
    Assignability cache size: 36607
    Identity cache size: 4
    Subtype cache size: 1
    I/O Read time: 0.00s
    Parse time: 0.00s
    Program time: 0.01s
    Bind time: 0.00s
    Check time: 0.52s
    transformTime time: 0.00s
    commentTime time: 0.00s
    printTime time: 0.00s
    Emit time: 0.01s
    Source Map time: 0.00s
    I/O Write time: 0.00s
    Total time: 0.53s

Discussions similaires

  1. Microsoft annonce la disponibilit� de TypeScript 3.1 RC
    Par St�phane le calme dans le forum TypeScript
    R�ponses: 1
    Dernier message: 28/09/2018, 13h02
  2. Microsoft annonce la disponibilit� de TypeScript 2.9 RC
    Par St�phane le calme dans le forum TypeScript
    R�ponses: 5
    Dernier message: 05/06/2018, 10h23
  3. R�ponses: 0
    Dernier message: 28/03/2018, 00h20
  4. Microsoft annonce la disponibilit� de TypeScript 2.4
    Par St�phane le calme dans le forum TypeScript
    R�ponses: 1
    Dernier message: 28/06/2017, 07h38
  5. R�ponses: 0
    Dernier message: 23/02/2017, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo