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` nest 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` nest 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;
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
Partager