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 :

La version stable de TypeScript 3.7.0 est disponible


Sujet :

TypeScript

  1. #1
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    Février 2017
    Messages
    1 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2017
    Messages : 1 837
    Points : 51 397
    Points
    51 397
    Par défaut La version stable de TypeScript 3.7.0 est disponible
    Typescript 3.7.0 va prendre en charge l’opérateur de chaînage d’optionnels (?.)
    En s'appuyant sur le 3e draft pour JavaScript

    Supposons, dans l’exemple qui suit, que l’on veuille extraire le nom de la cité au sein d’un enregistrement obtenu d’une API tierce :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const apiResult = {
      name: "Patrick elgato",
      office: {
        primary: {
          city: "Lohove",
          state: "South"
        }
      }
    }

    L’une des solutions serait alors de procéder de la manière suivante :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const city = apiResult.office.primary.city;
    // --> "Lohove"

    L’approche est directe. Néanmoins, elle se base sur la dangereuse hypothèse que l’API renverra toujours la réponse sous la même forme lors de l’exécution. En effet, il suffit que l’API renvoie un profil utilisateur duquel la sous-structure office est manquante pour que des problèmes surviennent . Illustration avec le bout de code qui suit :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const apiResult = {
      name: "Patrick elgato"
    }const city = apiResult.office.primary.city;
    // --> Uncaught TypeError: Cannot read property 'primary' of null

    De façon globale, le problème se pose avec les API qui ne dévoilent pas tous les types de réponses possibles. Une bonne approche à la résolution du problème consiste alors à considérer les propriétés au sein de ces structures comme optionnelles. C’est là qu’intervient l’opérateur dit de chaînage d’optionnels ( ?.) dont le fonctionnement est résumé ci-dessous :

    /
    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /  if `a` is `undefined` or `null`:
    //    return `undefined`
    //  else: 
    //    return `a.b`
    a?.b;// The optional chaining operator is equivalent to:
    (a == null) ? undefined : a.b;

    De façon brossée, l’opérateur de chaînage d’optionnels permet de parcourir des structures similaires à des arbres de façon élégante : si l’une des propriétés intermédiaires est null ou undefined, la chaîne entière est alors évaluée comme undefined. Application à l’exemple de la tentative d’extraction du nom de la cité au sein de l’enregistrement obtenu d’une API tierce :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const city = apiResult?.office?.primary?.city;
    // --> string | undefined

    Les développeurs habitués de langages de programmation comme C# de Microsoft ou Swift d’Apple connaissent cet opérateur puisque celui-ci est pris en charge par ces langages. À contrario, sa prise en charge continue de se faire attendre sous TypeScript, mais semble-t-il, plus pour longtemps d’après ce qui ressort des derniers développements.

    En effet, le contenu de discussions en cours sur le GitHub de Microsoft laisse filtrer que TypeScript 3.7.0 est pressenti pour offrir la prise en charge de l’opérateur de chaînage d’optionnels. TypeScript 3.6.0 est disponible en bêta depuis peu et la version finale est prévue pour la fin du mois en cours. TypeScript 3.7.0 devrait être disponible au mois d’octobre si l’on prend en compte le fait que de nouvelles versions du langage de programmation libre et open source sortent approximativement tous les deux mois.

    La décision de l’équipe TypeScript fait suite à la publication du troisième brouillon ECMAscript relatif à la prise en charge de l’opérateur de chaînage d’optionnels. Ce dernier permet grosso modo d’entrevoir les axes retenus du côté de Microsoft. La fenêtre de code dans la suite dresse une liste de cas de figures de base auxquels les développeurs pourront faire face sous TypeScript 3.7.0 :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a?.b                 // undefined si `a` est null/undefined, sinon `a.b`.
    a == null ? undefined : a.b
     
    a?.[x]                 // undefined si `a`est null/undefined, sinon `a[x]`.
    a == null ? undefined : a[x]
     
    a?.b()                        // undefined si `a` est null/undefined
    a == null ? undefined : a.b() // génère une erreur de type si `a.b` n’est pas une fonction
                                  // sinon, évaluation de `a.b()`
     
    a?.()                        // undefined si `a` est null/undefined
    a == null ? undefined : a()  // génère une erreur de type si `a` n’est ni null/undefined, ni une fonction
                                 // sinon appelle la fonction `a`

    Le draft laisse également filtrer que TypeScript 3.7.0 arrive avec l’opérateur ?? (nullish coalescing) complémentaire de celui de chaînage d’optionnels. Illustration avec le bout de code dans la suite :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // falls back to a default value when response.settings is missing or nullish
    // (response.settings == null) or when response.settings.animationDuration is missing
    // or nullish (response.settings.animationDuration == null)
    const animationDuration = response.settings?.animationDuration ?? 300;

    Nom : 2.png
Affichages : 18592
Taille : 15,1 Ko

    La publication d’un troisième brouillon ECMAscript relatif à la prise en charge de l’opérateur de chaînage d’optionnels est le signe que la fonctionnalité se rapproche des développeurs qui font usage de JavaScript également. C’est désormais la version finale de la spécification qui est attendue. En attendant, Microsoft va prendre les devants. La manœuvre pourrait, avec les retours d’expérience des développeurs TypeScript, influer sur les choix finaux du côté de JavaScript.

    Sources : ticket TypeScript, tc39

    Et vous ?

    Qu’en pensez-vous ?
    Comment accueillez-vous la disponibilité future de cet opérateur pour les langages de script TyepScript et JavaScript ?
    Entrevoyez-vous des inconvénients à l’introduction de cette fonctionnalité ? Si oui, lesquels ?

    Voir aussi :

    Après avoir réécrit Angular en TypeScript, Google approuve le surensemble JavaScript de Microsoft pour ses développements internes
    Google s'oriente vers TypeScript et voici pourquoi, selon Evan Martin, un ingénieur de la firme qui travaille sur le langage
    TypeScript 3.1 est disponible, cette version s'accompagne des redirections de versions ainsi que des types de tableau et de tuple mappables
    Microsoft annonce la disponibilité de TypeScript 3.3 qui apporte une meilleure gestion des projets composites introduits par TypeScript 3.0
    La RC de TypeScript 3.4 est disponible et apporte une nouvelle syntaxe pour ReadonlyArray ainsi que la vérification de type pour globalThis
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut Une fonctionnalitée à prendre avec des pincettes
    J'aime bien cela venant de C#.

    Cela dit attention à ce genre de code. Qu'on voit trop souvent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    personne?.adresse?.rue ='toto';
    personne?.adresse?.cpost='69000';
    personne?.adresse?.ville='=Lyon';
    Dans ce cas il vaut mieux utiliser une seule condition pour éviter de répéter le test …

  3. #3
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Ou sinon utiliser lodash.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  4. #4
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Le moins de dépendances à des librairies externes devrait toujours être un objectif principal de développeur.

    À part ça je ne connaissais pas cet opérateur dans les autres langages mais ça me semble très intéressant.

  5. #5
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Oui évidemment c'est toujours mieux d'éviter des dépendances mais là c'est quand même lodash, c'était juste pour souligner que ça existe depuis longtemps avec une lib qui peut être considérée comme faisant partie de l'API standard.

    Bref.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  6. #6
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 256
    Points
    66 256
    Par défaut La version bêta de TypeScript 3.7.0 est disponible
    La version bêta de TypeScript 3.7.0 est disponible
    avec la prise en charge de l'opérateur de chaînage d'optionnels (?.) et l’opérateur « ?? »

    TypeScript est un langage de programmation libre et open source et un surensemble de JavaScript développé par Microsoft qui a pour but d'améliorer et de sécuriser la production de code JavaScript. Microsoft a annoncé ce mardi la disponibilité de la version bêta de TypeScript 3.7.0 (TypeScript 3.7.0b). Cette version bêta inclut certaines des fonctionnalités les plus demandées par la communauté derrière le langage, notamment l'opérateur de chaînage d'optionnels (?.) « ?. », l’opérateur de coalescence null « ?? », ainsi que les fonctions d’assertion.

    Microsoft a publié TypeScript 3.6.0 en août dernier avec un bon nombre de nouvelles fonctionnalités et améliorations pour le langage. TypeScript 3.6 a introduit une vérification plus stricte pour les itérateurs et pour les fonctions du générateur. Dans les versions précédentes, les utilisateurs de générateurs n'avaient aucun moyen de différencier si une valeur était cédée ou renvoyée par un générateur. Microsoft a aussi apporté dans TypeScript 3.6.0 une utilisation plus améliorée des tableaux et une amélioration de l’UX en retouchant la classe Promise.

    Nom : z1.png
Affichages : 7014
Taille : 1,8 Ko

    Pour cette fois, dans TypeScript 3.7.0b, l’équipe de développement du langage a également présenté plusieurs nouvelles fonctionnalités qui vont certainement apparaître dans la version stable après les corrections de bogues et certaines améliorations. Ainsi, TypeScript 3.7.0b annonce l’arrivée dans la version stable de TypeScript 3.7.0 des fonctionnalités telles que l’opérateur de coalescence null « ?? », l'opérateur de chaînage d'optionnels (?.) « ?. », les fonctions d’assertion et de nombreuses autres fonctionnalités. Plus en détail, nous avons :

    La Coalescence null (Nullish Coalescing)

    D’après l’équipe de développement de TypeScript, l'opérateur de coalescence null est une fonctionnalité ECMAScript à venir qui va de pair avec le chaînage optionnel. Vous pouvez penser à l’opérateur de coalescence null (??) comme un moyen de revenir à une valeur par défaut lorsque vous traitez avec null ou undefined. Lorsque l’on écrit un code comme : let x = foo ?? bar(); par exemple, c'est une nouvelle façon de dire que la valeur foo sera utilisée quand elle est existe, mais quand elle est nulle ou non définie, la valeur de bar() sera retournée.

    En effet, l'opérateur de coalescence null est un opérateur binaire qui fait partie de la syntaxe d'une expression conditionnelle de base dans plusieurs langages de programmation, dont C#, Perl à partir de la version 5.10, Swift, etc. Si son comportement varie selon l'implantation, l'opérateur de coalescence null rend généralement le résultat du premier opérande à gauche si celui-ci existe et n'est pas nul, sinon renvoie le deuxième opérateur. Ce comportement permet de définir une valeur par défaut pour les cas où une valeur plus spécifique n'est pas disponible.

    De même, l'opérateur de coalescence null (??) a été également ajouté dans le langage de programmation PHP à partir de sa version 7.0.0, publiée en décembre 2015, en tant que sucre syntaxique pour le cas courant de besoin d'utiliser un ternaire en conjonction avec isset(). Il retourne son premier opérande s'il existe et n'est pas nul ; sinon, il retourne son deuxième opérande. Selon l’équipe de développement de TypeScript, l'opérateur ?? peut remplacer l'utilisation de || lorsque vous essayez d'utiliser une valeur par défaut.

    l'opérateur de chaînage d'optionnels (?.)

    Une autre fonctionnalité importante de cette version est le chaînage optionnel. Le chaînage optionnel vous permet d'écrire du code où vous pourrez immédiatement arrêter d'exécuter certaines expressions si vous rencontrez une valeur null ou undefined. Cette fonctionnalité est disponible avec l'opérateur de chaînage d'optionnels (?.). En fait, l'opérateur de chaînage d'optionnels (?.) permet de parcourir des structures similaires à des arbres de façon élégante : si l’une des propriétés intermédiaires est null ou undefined, la chaîne entière est alors évaluée comme undefined.

    Les développeurs qui sont habitués aux langages de programmation comme le C# de Microsoft ou le langage Swift d’Apple connaissent cet opérateur puisque celui-ci est pris en charge par ces langages. À contrario, sa prise en charge continuait à se faire attendre sous TypeScript, mais il est clair désormais qu'elle ne le restera plus pour longtemps et apparaîtra certainement dans TypeScript 3.7.0. Microsoft travaille sur la prise en charge de cet opérateur dans la version stable TypeScript 3.7.0 qui sera livrée dans les prochaines semaines.

    Les fonctions d’assertion (Assertion functions)

    Selon l’équipe de développement, il y a un ensemble spécifique de fonctions qui lancent une erreur si quelque chose d'inattendu se produit. C'est ce qu'on appelle les fonctions d'assertion. À titre d'exemple, Node.js a une fonction dédiée pour cela qui est appelée assert(). Les assertions en JavaScript sont souvent utilisées pour éviter que des types incorrects ne soient transmis. Ces fonctions existent également dans d’autres langages de scripts comme le PHP. Les fonctions d'assertion sont généralement utilisées dans le contexte d'une étape décisionnelle plutôt que comme élément d'action de la fonction.

    Une meilleure prise en charge des fonctions never-Returning

    Selon Microsoft, dans le cadre du travail concernant les fonctions d'assertion, TypeScript avait besoin d'encoder plus d'informations sur l'endroit et les fonctions appelées. TypeScript avait introduit un type never, qui indique les valeurs qui ne se produiront jamais. Le type never est utilisé lorsque vous êtes sûr que quelque chose ne se produira jamais. Par exemple, vous écrivez une fonction qui ne reviendra pas à son point final ou qui lève toujours une exception. Le type void peut avoir undefined ou null comme valeur, mais never ne peut jamais avoir de valeur. TypeScript 3.7.0 améliore l'utilisation de ces fonctions.

    Les alias de type récursif (Recursive Type Aliases)

    Les alias de types ont toujours eu une limite quant à la manière dont ils pouvaient être référencés « de manière récursive ». La raison en est que toute utilisation d'un alias de type doit pouvoir se substituer à celle de tout autre alias. Actuellement, les interfaces peuvent être récursives, mais leur expressivité est limitée, ce qui n'est pas le cas des alias de type. Cela signifie qu'en ce moment, vous devez combiner les deux : définir un alias de type, et extraire les parties récursives du type dans les interfaces. Ça marche, mais cela semble désordonné.

    En effet, les interfaces supplémentaires ne sont là que parce qu'elles sont nécessaires pour contourner la limitation de récursivité. Selon l’équipe de développement, TypeScript 3.7.0b résout ce problème avec l’ajout des alias de type récursif. La note de version de TypeScript 3.7.0b en dit plus à ce sujet.

    L’option de formatage du point-virgule

    Selon l’équipe de développement du langage, le formateur intégré de TypeScript prend désormais en charge l'insertion et la suppression de points-virgules aux emplacements où un point-virgule final est facultatif en raison des règles d'insertion automatiques de point-virgule (ASI) de JavaScript. Le paramètre est maintenant disponible dans Visual Studio Code Insiders et le sera dans Visual Studio 16.4 Preview 2 dans le menu Outils -> Options. Le choix d'une valeur entre “insert” et “remove” affecte également le format des importations automatiques, des types extraits et autres codes générés fournis par les services TypeScript.

    Si vous laissez le paramètre sur sa valeur par défaut “ignore”, le code généré correspond à la préférence de point-virgule détectée dans le fichier en cours. Par ailleurs, il existe également d’autres fonctionnalités et améliorations présentées par Microsoft dans cette version bêta de TypeScript 3.7.0. On peut citer : les contrôles de fonctions non appelées, les changements sur le DOM, etc. La version stable de TypeScript 3.7.0 sera publiée vers le début du mois de novembre. Toutefois, une release candidate (RC) sera disponible quelques semaines auparavant.

    Source : Microsoft

    Et vous ?

    Que pensez-vous des nouvelles fonctionnalités apportées dans la version bêta de TypeScript 3.7.0 ?

    Voir aussi

    TypeScript 3.6 est disponible et apporte le support de import.meta dans SystemJS et des API qui prennent en charge --build et --incremental

    PHP 7.0.0 officiellement disponible

    Typescript 3.7.0 va prendre en charge l'opérateur de chaînage d'optionnels (?.), en s'appuyant sur le 3e draft pour JavaScript
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  7. #7
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 256
    Points
    66 256
    Par défaut La version stable de TypeScript 3.7.0 est disponible
    La version stable de TypeScript 3.7.0 est disponible
    et apporte diverses fonctionnalités et quelques améliorations au langage

    Microsoft a publié ce mardi la version stable de TypeScript 3.7.0. Comme la version bêta publiée en octobre dernier, TypeScript 3.7.0 apporte diverses nouvelles fonctionnalités et quelques améliorations au langage, notamment l’opérateur de coalescence null « ?? », l'opérateur de chaînage d'optionnels « ?. », etc., et une meilleure prise en charge des fonctions never-Returning. Cette nouvelle version de TypeScript apporte également d’autres fonctionnalités telles que les fonctions d’assertions et les alias de types récursifs.

    TypeScript est un langage de programmation libre et open source et un surensemble de JavaScript développé par Microsoft qui a pour but d'améliorer et de sécuriser la production de code JavaScript. TypeScript 3.6.0 est sorti en août avec de nouvelles fonctionnalités et améliorations pour le langage. TypeScript 3.6.0 a introduit une vérification plus stricte pour les itérateurs et pour les fonctions du générateur. Dans les versions précédentes, les utilisateurs de générateurs ne pouvaient pas différencier si une valeur était cédée ou renvoyée par un générateur.

    Microsoft a aussi apporté dans TypeScript 3.6.0 une utilisation plus améliorée des tableaux et une amélioration de l’UX en retouchant la classe Promise. Après la bêta de TypeScript 3.7.0 publié au début du mois passé, Microsoft annonce à présent la disponibilité de la version stable. Voici de quoi il s’agit dans TypeScript 3.7.0 :

    l'opérateur de chaînage d'optionnels (?.)

    Une autre fonctionnalité importante de cette version est le chaînage optionnel. Le chaînage optionnel vous permet d'écrire du code où vous pourrez immédiatement arrêter d'exécuter certaines expressions si vous rencontrez une valeur null ou undefined. La fonctionnalité est disponible avec l'opérateur de chaînage d'optionnels (?.). En fait, l'opérateur de chaînage d'optionnels (?.) permet de parcourir des structures similaires à des arbres de façon élégante : si l’une des propriétés intermédiaires est null ou undefined, la chaîne entière est alors évaluée comme undefined.

    Les développeurs qui sont habitués aux langages de programmation comme le C# de Microsoft ou le langage Swift d’Apple connaissent cet opérateur puisque celui-ci est pris en charge par ces langages. À contrario, sa prise en charge continuait à se faire attendre sous TypeScript, mais il est clair désormais qu'elle ne le restera plus pour longtemps et apparaîtra certainement dans TypeScript 3.7.0. Microsoft travaille sur la prise en charge de cet opérateur dans la version stable TypeScript 3.7.0 qui sera livrée dans les prochaines semaines.

    Nom : typescriptfeature.png
Affichages : 3507
Taille : 22,8 Ko

    La coalescence null

    D’après l’équipe de développement de TypeScript, l'opérateur de coalescence null est une fonctionnalité ECMAScript à venir qui va de pair avec le chaînage optionnel. Vous pouvez penser à l’opérateur de coalescence null (??) comme un moyen de revenir à une valeur par défaut lorsque vous traitez avec null ou undefined. Lorsque l’on écrit un code comme : let x = foo ?? bar(); par exemple, c'est une nouvelle façon de dire que la valeur foo sera utilisée quand elle est existe, mais quand elle est nulle ou non définie, la valeur de bar() sera retournée.

    En effet, l'opérateur de coalescence null est un opérateur binaire qui fait partie de la syntaxe d'une expression conditionnelle de base dans plusieurs langages de programmation, dont C#, Perl à partir de la version 5.10, Swift, etc. Si son comportement varie selon l'implantation, l'opérateur de coalescence null rend généralement le résultat du premier opérande à gauche si celui-ci existe et n'est pas nul, sinon renvoie le deuxième opérateur. Ce comportement permet de définir une valeur par défaut pour les cas où une valeur plus spécifique n'est pas disponible.

    De même, l'opérateur de coalescence null (??) a été également ajouté dans le langage de programmation PHP à partir de sa version 7.0.0, publiée en décembre 2015, en tant que sucre syntaxique pour le cas courant de besoin d'utiliser un ternaire en conjonction avec isset(). Il retourne son premier opérande s'il existe et n'est pas nul ; sinon, il retourne son deuxième opérande. Selon l’équipe de développement de TypeScript, l'opérateur ?? peut remplacer l'utilisation de || lorsque vous essayez d'utiliser une valeur par défaut.

    Les fonctions d’assertion

    Selon l’équipe de développement, il y a un ensemble spécifique de fonctions qui lancent une erreur si quelque chose d'inattendu se produit. C'est ce qu'on appelle les fonctions d'assertion. À titre d'exemple, Node.js a une fonction dédiée pour cela qui est appelée assert(). Les assertions en JavaScript sont souvent utilisées pour éviter que des types incorrects ne soient transmis. Ces fonctions existent également dans d’autres langages de scripts comme le PHP. Les fonctions d'assertion sont généralement utilisées dans le contexte d'une étape décisionnelle plutôt que comme élément d'action de la fonction.
    Une meilleure prise en charge des fonctions never-Returning

    Selon Microsoft, dans le cadre du travail concernant les fonctions d'assertion, TypeScript avait besoin d'encoder plus d'informations sur l'endroit et les fonctions appelées. TypeScript avait introduit un type never, qui indique les valeurs qui ne se produiront jamais. Le type never est utilisé lorsque vous êtes sûr que quelque chose ne se produira jamais. Par exemple, vous écrivez une fonction qui ne reviendra pas à son point final ou qui lève toujours une exception. Le type void peut avoir undefined ou null comme valeur, mais never ne peut jamais avoir de valeur. TypeScript 3.7.0 améliore l'utilisation de ces fonctions.

    Les alias de type récursif

    Les alias de types ont toujours eu une limite quant à la manière dont ils pouvaient être référencés « de manière récursive ». La raison en est que toute utilisation d'un alias de type doit pouvoir se substituer à celle de tout autre alias. Actuellement, les interfaces peuvent être récursives, mais leur expressivité est limitée, ce qui n'est pas le cas des alias de type. Cela signifie qu'en ce moment, vous devez combiner les deux : définir un alias de type, et extraire les parties récursives du type dans les interfaces. Ça marche, mais cela semble désordonné.

    En effet, les interfaces supplémentaires ne sont là que parce qu'elles sont nécessaires pour contourner la limitation de récursivité. Selon l’équipe de développement, TypeScript 3.7.0b résout ce problème avec l’ajout des alias de type récursif. La note de version de TypeScript 3.7.0b en dit plus à ce sujet. Pour activer les modèles d'alias de type récursif décrits ci-dessus, la propriété typeArguments a été supprimée de l'interface TypeReference. Les utilisateurs devraient plutôt utiliser la fonction getTypeArguments sur les instances TypeChecker.

    Édition sans construction avec des références de projet

    Selon l'équipe de développement, les références de projets de TypeScript fournissent un moyen facile de décomposer les bases de code pour donner des compilations plus rapides. Cependant, éditer un projet dont les dépendances n'avaient pas été construites (ou dont la sortie n'était pas à jour) signifiait que l'expérience d'édition ne fonctionnerait pas bien. À partir de TypeScript 3.7.0, lors de l'ouverture d'un projet avec des dépendances, TypeScript utilisera automatiquement les fichiers source.ts/.tsx à la place.

    Cela signifie que les projets utilisant des références de projet bénéficieront désormais d'une meilleure expérience d'édition où les opérations sémantiques sont à jour et juste fonctionnelles. Si vous le souhaitez, vous pouvez désactiver ce comportement avec l'option du compilateur disableSourceOfProjectReferenceRedirect, ce qui peut être approprié lorsque vous travaillez sur de très grands projets où ce changement peut avoir un impact sur les performances d'édition.

    L’option de formatage du point-virgule

    Selon l’équipe de développement du langage, le formateur intégré de TypeScript prend désormais en charge l'insertion et la suppression de points-virgules aux emplacements où un point-virgule final est facultatif en raison des règles d'insertion automatiques de point-virgule (ASI) de JavaScript. Le paramètre est maintenant disponible dans Visual Studio Code Insiders et le sera dans Visual Studio 16.4 Preview 2 dans le menu Outils -> Options. Le choix d'une valeur entre “insert” et “remove” affecte également le format des importations automatiques, des types extraits et autres codes générés fournis par les services TypeScript.

    Si vous laissez le paramètre sur sa valeur par défaut “ignore”, le code généré correspond à la préférence de point-virgule détectée dans le fichier en cours. Par ailleurs, il existe également d’autres fonctionnalités et améliorations présentées par Microsoft dans cette version de TypeScript 3.7.0. On peut citer : les contrôles de fonctions non appelées, les changements sur le DOM, etc. Alors quelle est la prochaine étape ? Parallèlement à la publication de TypeScript 3.7.0, Microsoft a aussi lancé les travaux portant sur la version 3.8.0 du langage.

    « Nous avons récemment publié le plan d'itération pour TypeScript 3.8, et nous mettrons à jour notre feuille de route à mesure que nous aurons plus de détails. Nous voulons que nos utilisateurs ressentent vraiment de la joie quand ils écrivent du code, et nous espérons que TypeScript 3.7 fait exactement cela », a écrit Daniel Rosenwasser, le gestionnaire de programme TypeScript chez Microsoft.

    Source : Microsoft

    Et vous ?

    Qu'en pensez-vous ?
    Comment appréciez-vous la version 3.7 de TypeScript ?

    Voir aussi

    La version bêta de TypeScript 3.7.0 est disponible avec la prise en charge de l'opérateur de chaînage d'optionnels (?.) et l'opérateur (??)

    Typescript 3.7.0 va prendre en charge l'opérateur de chaînage d'optionnels (?.), en s'appuyant sur le 3e draft pour JavaScript

    TypeScript 3.6 est disponible et apporte le support de import.meta dans SystemJS et des API qui prennent en charge --build et --incremental

    PHP 7.0.0 officiellement disponible
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Quel est l'intérêt de "??" par rapport à || ?

    On est bien d'accord que ces 2 solutions sont identiques ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Points : 18
    Points
    18
    Par défaut
    L'intérêt de ?? au lieu de || est de différencié le null du false :

    foo || bar ne permet pas de savoir si foo vaut false ou null

    foo ?? bar indique que l'on veut bar que si et seulement si foo est null.

  10. #10
    Membre averti Avatar de goldbergg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 125
    Points : 402
    Points
    402
    Par défaut
    Sur le playground https://www.typescriptlang.org/

    Ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var a: number = 0;
    var b = a ?? 1;
    var c = a || 1;
    console.log(a, b, c);
    est convertie en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "use strict";
    var a = 0;
    var b = (a !== null && a !== void 0 ? a : 1);
    var c = a || 1;
    console.log(a, b, c);//0 0 1
    Le ?? est plus sur que le ||

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 7
    Points
    7
    Par défaut
    @goldbergg

    Il est plus sur dans le sens ou il interprète pas la première valeur comme une "falsy/truthy".
    D'ou la différence dans ton exemple entre b et c.

    Edit: J'avais mal lu ton message, j'avais cru à une question ...

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 7
    Points
    7
    Par défaut
    Aaah ! Super pour le ??, je l'attendais celui là !

Discussions similaires

  1. commande DOS pour prendre une partie d'un mot
    Par sofiane1111 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/09/2007, 10h59
  2. comment configurer tomcat pour prendre une racine determinée
    Par diamonds dans le forum Tomcat et TomEE
    Réponses: 12
    Dernier message: 26/03/2007, 21h42
  3. Formule pour prendre certains digits d'un Champs.
    Par jboumaaz dans le forum Formules
    Réponses: 6
    Dernier message: 17/01/2007, 15h37
  4. Quelle URL dois-je entrer pour prendre Developper.com en RSS ?
    Par koKoTis dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 19
    Dernier message: 03/09/2006, 13h24

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