{"id":68254,"date":"2023-04-18T12:26:41","date_gmt":"2023-04-18T11:26:41","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=68254&#038;preview=true&#038;preview_id=68254"},"modified":"2023-08-22T11:59:42","modified_gmt":"2023-08-22T10:59:42","slug":"typescript-5-0","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/","title":{"rendered":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !"},"content":{"rendered":"<p>TypeScript 5.0 a \u00e9t\u00e9 officiellement publi\u00e9 le 16 mars 2023, et est maintenant disponible pour tout le monde. Cette version introduit de nombreuses nouvelles fonctionnalit\u00e9s dans le but de rendre TypeScript plus petit, plus simple et plus rapide.<\/p>\n<p>Cette nouvelle version modernise les d\u00e9corateurs pour la personnalisation des classes, ce qui permet de personnaliser les classes et leurs membres de mani\u00e8re r\u00e9utilisable. Les <a href=\"https:\/\/kinsta.com\/fr\/blog\/types-de-developpeurs\/\">d\u00e9veloppeurs<\/a> peuvent d\u00e9sormais ajouter un modificateur const \u00e0 la d\u00e9claration d&rsquo;un param\u00e8tre de type, ce qui permet aux inf\u00e9rences de type const d&rsquo;\u00eatre utilis\u00e9es par d\u00e9faut. La nouvelle version rend \u00e9galement tous les enums union enums, ce qui simplifie la structure du code et acc\u00e9l\u00e8re l&rsquo;exp\u00e9rience TypeScript.<\/p>\n<p>Dans cet article, vous explorerez les changements introduits dans TypeScript 5.0, en donnant un aper\u00e7u approfondi de ses nouvelles fonctionnalit\u00e9s et capacit\u00e9s.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>D\u00e9marrer avec TypeScript 5.0<\/h2>\n<p>TypeScript est un compilateur officiel que vous pouvez installer dans votre projet \u00e0 l&rsquo;aide de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-npm\/\">npm<\/a>. Si vous souhaitez commencer \u00e0 utiliser TypeScript 5.0 dans votre projet, vous pouvez ex\u00e9cuter la commande suivante dans le r\u00e9pertoire de votre projet :<\/p>\n<pre><code class=\"language-bash\">npm install -D typescript<\/code><\/pre>\n<p>Cela installera le compilateur dans le r\u00e9pertoire <strong>node_modules<\/strong>, que vous pouvez maintenant ex\u00e9cuter avec la commande <code>npx tsc<\/code>.<\/p>\n<p>Vous trouverez \u00e9galement des instructions sur l&rsquo;utilisation de la nouvelle version de TypeScript dans <a href=\"https:\/\/code.visualstudio.com\/docs\/typescript\/typescript-compiling#_using-the-workspace-version-of-typescript\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code dans cette documentation<\/a>.<\/p>\n\n<h2>Quelles sont les nouveaut\u00e9s de TypeScript 5.0 ?<\/h2>\n<p>Dans cet article, nous allons explorer 5 mises \u00e0 jour majeures introduites dans TypeScript. Ces fonctionnalit\u00e9s sont les suivantes :<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>D\u00e9corateurs modernis\u00e9s<\/h3>\n<p>Les d\u00e9corateurs existent dans TypeScript depuis un certain temps sous un drapeau exp\u00e9rimental, mais la nouvelle version les met \u00e0 jour avec la proposition ECMAScript, qui est maintenant \u00e0 <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\">l&rsquo;\u00e9tape 3<\/a>, ce qui signifie qu&rsquo;elle est \u00e0 un stade o\u00f9 elle est ajout\u00e9e \u00e0 TypeScript.<\/p>\n<p>Les d\u00e9corateurs sont un moyen de personnaliser le comportement des classes et de leurs membres de mani\u00e8re r\u00e9utilisable. Par exemple, si vous avez une classe qui a deux m\u00e9thodes, <code>greet<\/code> et <code>getAge<\/code>:<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n\n    greet() {\n        console.log(`Hello, my name is ${this.name}.`);\n    }\n\n    getAge() {\n        console.log(`I am ${this.age} years old.`);\n    }\n}\n\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Dans des cas d&rsquo;utilisation r\u00e9els, cette classe devrait avoir des m\u00e9thodes plus compliqu\u00e9es qui g\u00e8rent une logique asynchrone et ont des effets secondaires, e.t.c., o\u00f9 vous voudriez ajouter des appels <code>console.log<\/code> pour aider \u00e0 d\u00e9boguer les m\u00e9thodes.<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n\n    greet() {\n        console.log('LOG: Method Execution Starts.');\n        console.log(`Hello, my name is ${this.name}.`);\n        console.log('LOG: Method Execution Ends.');\n    }\n\n    getAge() {\n        console.log('LOG: Method Execution Starts.');\n        console.log(`I am ${this.age} years old.`);\n        console.log('Method Execution Ends.');\n    }\n}\n\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Il s&rsquo;agit d&rsquo;un sch\u00e9ma fr\u00e9quent, et il serait pratique d&rsquo;avoir une solution \u00e0 appliquer \u00e0 chaque m\u00e9thode.<\/p>\n<p>C&rsquo;est l\u00e0 que les d\u00e9corateurs entrent en jeu. Nous pouvons d\u00e9finir une fonction nomm\u00e9e <code>debugMethod<\/code> qui se pr\u00e9sente comme suit :<\/p>\n<pre><code class=\"language-typescript\">function debugMethod(originalMethod: any, context: any) {\n    function replacementMethod(this: any, ...args: any[]) {\n        console.log('Method Execution Starts.');\n        const result = originalMethod.call(this, ...args);\n        console.log('Method Execution Ends.');\n        return result;\n    }\n    return replacementMethod;\n}<\/code><\/pre>\n<p>Dans le code ci-dessus, <code>debugMethod<\/code> prend la m\u00e9thode originale (<code>originalMethod<\/code>) et renvoie une fonction qui fait ce qui suit :<\/p>\n<ol start=\"1\">\n<li>Elle enregistre un message \u00ab Method Execution Starts \u00bb.<\/li>\n<li>Elle transmet la m\u00e9thode originale et tous ses arguments (y compris ceci).<\/li>\n<li>Enregistre un message \u00ab Method Execution Ends \u00bb.<\/li>\n<li>Retourne ce que la m\u00e9thode originale a retourn\u00e9.<\/li>\n<\/ol>\n<p>En utilisant des d\u00e9corateurs, vous pouvez appliquer la m\u00e9thode <code>debugMethod<\/code> \u00e0 vos m\u00e9thodes, comme le montre le code ci-dessous :<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n    @debugMethod\n    greet() {\n        console.log(`Hello, my name is ${this.name}.`);\n    }\n    @debugMethod\n    getAge() {\n        console.log(`I am ${this.age} years old.`);\n    }\n}\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Vous obtiendrez le r\u00e9sultat suivant :<\/p>\n<pre><code class=\"language-bash\">LOG: Entering method.\nHello, my name is Ron.\nLOG: Exiting method.\nLOG: Entering method.\nI am 30 years old.\nLOG: Exiting method.<\/code><\/pre>\n<p>Lors de la d\u00e9finition de la fonction d\u00e9coratrice (<code>debugMethod<\/code>), un second param\u00e8tre est pass\u00e9, appel\u00e9 <code>context<\/code> (il s&rsquo;agit de l&rsquo;objet contextuel, qui contient des informations utiles sur la mani\u00e8re dont la m\u00e9thode d\u00e9cor\u00e9e a \u00e9t\u00e9 d\u00e9clar\u00e9e, ainsi que le nom de la m\u00e9thode). Vous pouvez mettre \u00e0 jour votre <code>debugMethod<\/code> pour obtenir le nom de la m\u00e9thode \u00e0 partir de l&rsquo;objet <code>context<\/code>:<\/p>\n<pre><code class=\"language-typescript\">function debugMethod(\n    originalMethod: any,\n    context: ClassMethodDecoratorContext\n) {\n    const methodName = String(context.name);\n    function replacementMethod(this: any, ...args: any[]) {\n        console.log(`'${methodName}' Execution Starts.`);\n        const result = originalMethod.call(this, ...args);\n        console.log(`'${methodName}' Execution Ends.`);\n        return result;\n    }\n    return replacementMethod;\n}<\/code><\/pre>\n<p>Lorsque vous ex\u00e9cutez votre code, la sortie contiendra d\u00e9sormais le nom de chaque m\u00e9thode d\u00e9cor\u00e9e avec le d\u00e9corateur <code>debugMethod<\/code>:<\/p>\n<pre><code class=\"language-bash\">'greet' Execution Starts.\nHello, my name is Ron.\n'greet' Execution Ends.\n'getAge' Execution Starts.\nI am 30 years old.\n'getAge' Execution Ends.<\/code><\/pre>\n<p>Il y a plus \u00e0 faire avec les d\u00e9corateurs. N&rsquo;h\u00e9sitez pas \u00e0 consulter la <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/50820\">pull request originale<\/a> pour plus d&rsquo;informations sur l&rsquo;utilisation des d\u00e9corateurs en TypeScript.<\/p>\n<h3>Introduction des param\u00e8tres de type const<\/h3>\n<p>Il s&rsquo;agit d&rsquo;une autre version importante qui vous donne un nouvel outil avec les g\u00e9n\u00e9riques afin d&rsquo;am\u00e9liorer l&rsquo;inf\u00e9rence que vous obtenez lorsque vous appelez des fonctions. Par d\u00e9faut, lorsque vous d\u00e9clarez des valeurs avec <code>const<\/code>, TypeScript d\u00e9duit le type et non ses valeurs litt\u00e9rales :<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: string[]\nconst names = ['John', 'Jake', 'Jack'];<\/code><\/pre>\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent, pour obtenir l&rsquo;inf\u00e9rence souhait\u00e9e, vous deviez utiliser l&rsquo;assertion const en ajoutant \u00ab as const \u00bb :<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: readonly [\"John\", \"Jake\", \"Jack\"]\nconst names = ['John', 'Jake', 'Jack'] as const;<\/code><\/pre>\n<p>Lorsque vous appelez des fonctions, c&rsquo;est la m\u00eame chose. Dans le code ci-dessous, le type de <strong>countries<\/strong> d\u00e9duit est <code>string[]<\/code>:<\/p>\n<pre><code class=\"language-typescript\">type HasCountries = { countries: readonly string[] };\nfunction getCountriesExactly(arg: T): T['countries'] {\n    return arg.countries;\n}\n\n\/\/ Inferred type: string[]\nconst countries = getCountriesExactly({ countries: ['USA', 'Canada', 'India'] });<\/code><\/pre>\n<p>Il se peut que vous souhaitiez un type plus sp\u00e9cifique, ce que l&rsquo;on peut faire jusqu&rsquo;\u00e0 pr\u00e9sent en ajoutant l&rsquo;assertion <code>as const<\/code>:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: readonly [\"USA\", \"Canada\", \"India\"]\nconst names = getNamesExactly({ countries: ['USA', 'Canada', 'India'] } as const);<\/code><\/pre>\n<p>Cela peut \u00eatre difficile \u00e0 retenir et \u00e0 mettre en \u0153uvre. Cependant, TypeScript 5.0 introduit une nouvelle fonctionnalit\u00e9 qui vous permet d&rsquo;ajouter un modificateur const \u00e0 une d\u00e9claration de param\u00e8tre de type, ce qui appliquera automatiquement une inf\u00e9rence de type const par d\u00e9faut.<\/p>\n<pre><code class=\"language-typescript\">type HasCountries = { countries: readonly string[] };\nfunction getNamesExactly(arg: T): T['countries'] {\n    return arg.countries;\n}\n\n\/\/ Inferred type: readonly [\"USA\", \"Canada\", \"India\"]\nconst names = getNamesExactly({ countries: ['USA', 'Canada', 'India'] });<\/code><\/pre>\n<p>L&rsquo;utilisation des param\u00e8tres de type <code>const<\/code> permet aux d\u00e9veloppeurs d&rsquo;exprimer plus clairement leur intention dans leur code. Si une variable est destin\u00e9e \u00e0 \u00eatre constante et \u00e0 ne jamais changer, l&rsquo;utilisation d&rsquo;un param\u00e8tre de type <code>const<\/code> garantit qu&rsquo;elle ne pourra jamais \u00eatre modifi\u00e9e accidentellement.<\/p>\n<p>Vous pouvez consulter la <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51865\">pull request originale<\/a> pour plus d&rsquo;informations sur la fa\u00e7on dont le param\u00e8tre de type const fonctionne dans TypeScript.<\/p>\n<h3>Am\u00e9liorations des Enums<\/h3>\n<p>Les Enums dans TypeScript sont une construction puissante qui permet aux d\u00e9veloppeurs de d\u00e9finir un ensemble de constantes nomm\u00e9es. Dans TypeScript 5.0, des am\u00e9liorations ont \u00e9t\u00e9 apport\u00e9es aux enums pour les rendre encore plus flexibles et utiles.<\/p>\n<p>Par exemple, si vous avez l&rsquo;enum suivant pass\u00e9 dans une fonction :<\/p>\n<pre><code class=\"language-typescript\">enum Color {\n    Red,\n    Green,\n    Blue,\n}\n\nfunction getColorName(colorLevel: Color) {\n    return colorLevel;\n}\n\nconsole.log(getColorName(1));<\/code><\/pre>\n<p>Avant l&rsquo;introduction de TypeScript 5.0, vous pouviez passer un mauvais num\u00e9ro de niveau, et il n&rsquo;y avait pas d&rsquo;erreur. Mais avec l&rsquo;introduction de TypeScript 5.0, il y aura imm\u00e9diatement une erreur.<\/p>\n<p>De plus, la nouvelle version transforme tous les enums en unions en cr\u00e9ant un type unique pour chaque membre calcul\u00e9. Cette am\u00e9lioration permet de restreindre tous les enums et de r\u00e9f\u00e9rencer leurs membres en tant que types :<\/p>\n<pre><code class=\"language-typescript\">enum Color {\n    Red,\n    Purple,\n    Orange,\n    Green,\n    Blue,\n    Black,\n    White,\n}\n\ntype PrimaryColor = Color.Red | Color.Green | Color.Blue;\n\nfunction isPrimaryColor(c: Color): c is PrimaryColor {\n    return c === Color.Red || c === Color.Green || c === Color.Blue;\n}\n\nconsole.log(isPrimaryColor(Color.White)); \/\/ Outputs: false\nconsole.log(isPrimaryColor(Color.Red)); \/\/ Outputs: true<\/code><\/pre>\n<h3>Am\u00e9liorations des performances de TypeScript 5.0<\/h3>\n<p>TypeScript 5.0 comprend de nombreux changements significatifs dans la structure du code, les structures de donn\u00e9es et les extensions algorithmiques. Cela a permis d&rsquo;am\u00e9liorer l&rsquo;ensemble de l&rsquo;exp\u00e9rience TypeScript, de l&rsquo;installation \u00e0 l&rsquo;ex\u00e9cution, en la rendant plus rapide et plus efficace.<\/p>\n<p>Par exemple, la diff\u00e9rence entre la taille des paquets TypeScript 5.0 et 4.9 est assez impressionnante.<\/p>\n<p>TypeScript a r\u00e9cemment migr\u00e9 des espaces de noms vers les modules, ce qui lui permet de tirer parti d&rsquo;outils de construction modernes capables d&rsquo;effectuer des optimisations telles que le \u00ab scope hoisting \u00bb. De plus, la suppression de certains codes obsol\u00e8tes a permis de r\u00e9duire de 26,4 Mo la taille du package de TypeScript 4.9, qui \u00e9tait de 63,8 Mo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/04\/pasted-image-0.png\" alt=\"Taille du paquet TypeScript\" width=\"1600\" height=\"959\"><figcaption class=\"wp-caption-text\">Taille du paquet TypeScript<\/figcaption><\/figure>\n<p>Voici quelques autres gains int\u00e9ressants en termes de vitesse et de taille entre TypeScript 5.0 et 4.9 :<\/p>\n<div class=\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><strong>Sc\u00e9nario<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Temps ou taille par rapport \u00e0 TS 4.9<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps de construction de l&rsquo;interface mat\u00e9rielle<\/td>\n<td colspan=\"1\" rowspan=\"1\">90 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps de d\u00e9marrage du compilateur TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">89 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps de construction de Playwright<\/td>\n<td colspan=\"1\" rowspan=\"1\">88 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps d&rsquo;auto-construction du compilateur TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">87 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps de construction d&rsquo;Outlook Web<\/td>\n<td colspan=\"1\" rowspan=\"1\">82 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Temps de construction de VS Code<\/td>\n<td colspan=\"1\" rowspan=\"1\">80 %<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Taille du paquet typescript npm<\/td>\n<td colspan=\"1\" rowspan=\"1\">59 %<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>R\u00e9solution du Bundler pour une meilleure r\u00e9solution des modules<\/h3>\n<p>Lorsque vous \u00e9crivez une instruction d&rsquo;importation en TypeScript, le compilateur doit savoir \u00e0 quoi l&rsquo;importation fait r\u00e9f\u00e9rence. Pour ce faire, il utilise la r\u00e9solution de module. Par exemple, lorsque vous \u00e9crivez <code>import { a } from \"moduleA\"<\/code>, le compilateur doit conna\u00eetre la d\u00e9finition de <code>a<\/code> dans <code>moduleA<\/code> pour v\u00e9rifier son utilisation.<\/p>\n<p>Dans TypeScript 4.7, deux nouvelles options ont \u00e9t\u00e9 ajout\u00e9es pour les param\u00e8tres <code>--module<\/code> et <code>moduleResolution<\/code>: <code>node16<\/code> et <code>nodenext<\/code>.<\/p>\n<p>L&rsquo;objectif de ces options \u00e9tait de repr\u00e9senter plus pr\u00e9cis\u00e9ment les r\u00e8gles de recherche exactes pour les modules ECMAScript dans <a href=\"https:\/\/kinsta.com\/fr\/blog\/node-js-vs-php\/\">Node.js<\/a>. Cependant, ce mode comporte plusieurs restrictions qui ne sont pas appliqu\u00e9es par d&rsquo;autres outils.<\/p>\n<p>Par exemple, dans un module ECMAScript de Node.js, toute importation relative doit inclure une extension de fichier pour fonctionner correctement :<\/p>\n<pre><code class=\"language-typescript\">import * as utils from \".\/utils\"; \/\/ Wrong \n\nimport * as utils from \".\/utils.mjs\"; \/\/ Correct<\/code><\/pre>\n<p>TypeScript a introduit une nouvelle strat\u00e9gie appel\u00e9e \u00ab moduleResolution bundler \u00bb Cette strat\u00e9gie peut \u00eatre mise en \u0153uvre en ajoutant le code suivant dans la section \u00ab compilerOptions \u00bb de votre fichier de configuration TypeScript :<\/p>\n<pre><code class=\"language-json\">{\n    \"compilerOptions\": {\n        \"target\": \"esnext\",\n        \"moduleResolution\": \"bundler\"\n    }\n}<\/code><\/pre>\n<p>Cette nouvelle strat\u00e9gie convient \u00e0 ceux qui utilisent des bundlers modernes tels que Vite, esbuild, swc, Webpack, Parcel, et d&rsquo;autres qui utilisent une strat\u00e9gie de recherche hybride.<\/p>\n<p>Vous pouvez consulter la <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51669\" target=\"_blank\" rel=\"noopener noreferrer\">pull request originale et son impl\u00e9mentation<\/a> pour plus d&rsquo;informations sur la fa\u00e7on dont <code>moduleResolution<\/code> bundler fonctionne dans TypeScript.<\/p>\n<h2>D\u00e9pr\u00e9ciations<\/h2>\n<p>TypeScript 5.0 est accompagn\u00e9 de quelques d\u00e9pr\u00e9ciations, y compris les exigences d&rsquo;ex\u00e9cution, les changements de lib.d.ts, et les changements de rupture de <a href=\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\">l&rsquo;API<\/a>.<\/p>\n<ol start=\"1\">\n<li><strong>Exigences d&rsquo;ex\u00e9cution :<\/strong> TypeScript cible d\u00e9sormais ECMAScript 2018, et le paquetage fixe une attente minimale de moteur de 12.20. Par cons\u00e9quent, les utilisateurs de Node.js doivent avoir une version minimale de 12.20 ou plus r\u00e9cente pour utiliser TypeScript 5.0.<\/li>\n<li><strong>Changements dans lib.d.ts :<\/strong> Il y a eu quelques changements dans la fa\u00e7on dont les types pour le DOM sont g\u00e9n\u00e9r\u00e9s, ce qui peut affecter le code existant. En particulier, certaines propri\u00e9t\u00e9s ont \u00e9t\u00e9 converties de types num\u00e9riques en types litt\u00e9raux num\u00e9riques, et les propri\u00e9t\u00e9s et m\u00e9thodes pour la gestion des \u00e9v\u00e9nements couper, copier et coller ont \u00e9t\u00e9 d\u00e9plac\u00e9es \u00e0 travers les interfaces.<\/li>\n<li><strong>Changements de rupture dans l&rsquo;API :<\/strong> Certaines interfaces inutiles ont \u00e9t\u00e9 supprim\u00e9es et des am\u00e9liorations ont \u00e9t\u00e9 apport\u00e9es \u00e0 la correction. TypeScript 5.0 est \u00e9galement pass\u00e9 aux modules.<\/li>\n<\/ol>\n<p>TypeScript 5.0 a d\u00e9pr\u00e9ci\u00e9 certains param\u00e8tres et leurs valeurs correspondantes, notamment <code>target: ES3<\/code>, <code>out<\/code>, <code>noImplicitUseStrict<\/code>, <code>keyofStringsOnly<\/code>, <code>suppressExcessPropertyErrors<\/code>, <code>suppressImplicitAnyIndexErrors<\/code>, <code>noStrictGenericChecks<\/code>, <code>charset<\/code>, <code>importsNotUsedAsValues<\/code>, et <code>preserveValueImports<\/code>, ainsi que prepend dans les r\u00e9f\u00e9rences de projet.<\/p>\n<p>Bien que ces configurations restent valables jusqu&rsquo;\u00e0 TypeScript 5.5, un avertissement sera \u00e9mis pour alerter les utilisateurs qui les utilisent encore.<\/p>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Dans cet article, vous avez d\u00e9couvert quelques-unes des principales fonctionnalit\u00e9s et am\u00e9liorations apport\u00e9es par TypeScript 5.0, telles que les am\u00e9liorations apport\u00e9es aux enums, \u00e0 la r\u00e9solution des bundlers et aux param\u00e8tres de type const, ainsi que les am\u00e9liorations apport\u00e9es \u00e0 la vitesse et \u00e0 la taille.<\/p>\n<p>Si vous envisagez d&rsquo;utiliser TypeScript pour vos prochains projets, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">essayez gratuitement l&rsquo;h\u00e9bergement d&rsquo;applications de Kinsta<\/a>.<\/p>\n<p><em>\u00c0 vous de jouer ! Quelles sont les fonctionnalit\u00e9s ou les am\u00e9liorations que vous trouvez les plus int\u00e9ressantes dans TypeScript 5.0 ? Y en a-t-il d&rsquo;importantes que nous n&rsquo;avons pas remarqu\u00e9es ? Faites-nous en part dans les commentaires.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TypeScript 5.0 a \u00e9t\u00e9 officiellement publi\u00e9 le 16 mars 2023, et est maintenant disponible pour tout le monde. Cette version introduit de nombreuses nouvelles fonctionnalit\u00e9s dans &#8230;<\/p>\n","protected":false},"author":287,"featured_media":68274,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[979,980],"class_list":["post-68254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-frameworks-javascript","topic-tutoriel-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l&#039;am\u00e9lioration des Enums, et bien plus encore.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !\" \/>\n<meta property=\"og:description\" content=\"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l&#039;am\u00e9lioration des Enums, et bien plus encore.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-18T11:26:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T10:59:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l&#039;am\u00e9lioration des Enums, et bien plus encore.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !\",\"datePublished\":\"2023-04-18T11:26:41+00:00\",\"dateModified\":\"2023-08-22T10:59:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\"},\"wordCount\":1859,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\",\"name\":\"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\",\"datePublished\":\"2023-04-18T11:26:41+00:00\",\"dateModified\":\"2023-08-22T10:59:42+00:00\",\"description\":\"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l'am\u00e9lioration des Enums, et bien plus encore.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg\",\"width\":1536,\"height\":768,\"caption\":\"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutoriels JavaScript\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/tutoriel-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler - Kinsta\u00ae","description":"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l'am\u00e9lioration des Enums, et bien plus encore.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/","og_locale":"fr_FR","og_type":"article","og_title":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !","og_description":"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l'am\u00e9lioration des Enums, et bien plus encore.","og_url":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-04-18T11:26:41+00:00","article_modified_time":"2023-08-22T10:59:42+00:00","og_image":[{"width":1536,"height":768,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l'am\u00e9lioration des Enums, et bien plus encore.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Joel Olawanle","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !","datePublished":"2023-04-18T11:26:41+00:00","dateModified":"2023-08-22T10:59:42+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/"},"wordCount":1859,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/","url":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/","name":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","datePublished":"2023-04-18T11:26:41+00:00","dateModified":"2023-08-22T10:59:42+00:00","description":"Plongez dans la nouvelle version TypeScript 5.0 et d\u00e9couvrez les nouveaut\u00e9s, notamment les d\u00e9clarateurs, le type Const, l'am\u00e9lioration des Enums, et bien plus encore.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/04\/typescript-5-0.jpeg","width":1536,"height":768,"caption":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, R\u00e9solution Bundler"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/typescript-5-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Tutoriels JavaScript","item":"https:\/\/kinsta.com\/fr\/sujets\/tutoriel-javascript\/"},{"@type":"ListItem","position":3,"name":"Nouveaut\u00e9s de TypeScript 5.0 : D\u00e9clarateurs, Type Const, Am\u00e9lioration des Enums, Vitesse, et bien plus encore !"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/68254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=68254"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/68254\/revisions"}],"predecessor-version":[{"id":68277,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/68254\/revisions\/68277"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/68254\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/68274"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=68254"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=68254"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=68254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}