[{"data":1,"prerenderedAt":1033},["ShallowReactive",2],{"page-\u002Fts\u002Fobjets-interfaces-types":3,"pieces-ts":990,"autour-\u002Fts\u002Fobjets-interfaces-types":1015,"prerequis-\u002Fts\u002Fobjets-interfaces-types":1020,"plan-ts":1022},{"id":4,"title":5,"body":6,"description":961,"extension":962,"ligne":49,"meta":963,"motsCles":964,"navigation":209,"niveau":968,"path":969,"prerequis":970,"ressources":972,"seo":981,"sources":982,"stem":988,"__hash__":989},"docs\u002Fts\u002F03.objets-interfaces-types.md","Objets, interface et type",{"type":7,"value":8,"toc":948},"minimark",[9,14,36,40,44,130,138,145,149,155,261,268,272,282,328,331,335,342,443,450,458,462,465,528,542,546,552,616,639,667,671,680,746,749,752,756,759,825,832,836,846,880,894,898,944],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,33],"ul",{},[18,19,20],"li",{},"Décrire la forme d'un objet avec ses propriétés.",[18,22,23,24,28,29,32],{},"Écrire une ",[25,26,27],"code",{},"interface"," et un alias avec ",[25,30,31],{},"type",".",[18,34,35],{},"Choisir entre les deux et les combiner.",[10,37,39],{"id":38},"typer-un-objet","Typer un objet",[41,42,43],"p",{},"Voici une recette sous forme d'objet JavaScript.",[45,46,51],"pre",{"className":47,"code":48,"language":49,"meta":50,"style":50},"language-ts shiki shiki-themes github-light-default github-dark-default github-dark-default","const recette: { nom: string; personnes: number } = {\n  nom: \"Gratin dauphinois\",\n  personnes: 4\n}\n","ts","",[25,52,53,102,115,124],{"__ignoreMap":50},[54,55,58,62,66,69,73,77,79,82,85,88,90,93,96,99],"span",{"class":56,"line":57},"line",1,[54,59,61],{"class":60},"sOnC1","const",[54,63,65],{"class":64},"s5iOY"," recette",[54,67,68],{"class":60},":",[54,70,72],{"class":71},"scfrF"," { ",[54,74,76],{"class":75},"sIXEE","nom",[54,78,68],{"class":60},[54,80,81],{"class":64}," string",[54,83,84],{"class":71},"; ",[54,86,87],{"class":75},"personnes",[54,89,68],{"class":60},[54,91,92],{"class":64}," number",[54,94,95],{"class":71}," } ",[54,97,98],{"class":60},"=",[54,100,101],{"class":71}," {\n",[54,103,105,108,112],{"class":56,"line":104},2,[54,106,107],{"class":71},"  nom: ",[54,109,111],{"class":110},"shWOn","\"Gratin dauphinois\"",[54,113,114],{"class":71},",\n",[54,116,118,121],{"class":56,"line":117},3,[54,119,120],{"class":71},"  personnes: ",[54,122,123],{"class":64},"4\n",[54,125,127],{"class":56,"line":126},4,[54,128,129],{"class":71},"}\n",[41,131,132,133,137],{},"Après les deux-points, les accolades décrivent la ",[134,135,136],"strong",{},"forme"," de l'objet : le nom de chaque propriété et son type.",[41,139,140,141,144],{},"TypeScript vérifie que tout est présent et du bon type. Écrire ",[25,142,143],{},"recette.duree"," est une erreur, car cette propriété n'existe pas dans la description.",[10,146,148],{"id":147},"donner-un-nom-avec-interface","Donner un nom avec interface",[41,150,151,152,154],{},"Recopier la forme à chaque usage devient vite lourd. Une ",[134,153,27],{}," donne un nom à une forme d'objet, que tu réutilises ensuite.",[45,156,158],{"className":47,"code":157,"language":49,"meta":50,"style":50},"interface Recette {\n  nom: string\n  personnes: number\n  vegetarien: boolean\n}\n\nconst gratin: Recette = {\n  nom: \"Gratin dauphinois\",\n  personnes: 4,\n  vegetarien: true\n}\n",[25,159,160,169,179,189,199,204,211,228,237,247,256],{"__ignoreMap":50},[54,161,162,164,167],{"class":56,"line":57},[54,163,27],{"class":60},[54,165,166],{"class":75}," Recette",[54,168,101],{"class":71},[54,170,171,174,176],{"class":56,"line":104},[54,172,173],{"class":75},"  nom",[54,175,68],{"class":60},[54,177,178],{"class":64}," string\n",[54,180,181,184,186],{"class":56,"line":117},[54,182,183],{"class":75},"  personnes",[54,185,68],{"class":60},[54,187,188],{"class":64}," number\n",[54,190,191,194,196],{"class":56,"line":126},[54,192,193],{"class":75},"  vegetarien",[54,195,68],{"class":60},[54,197,198],{"class":64}," boolean\n",[54,200,202],{"class":56,"line":201},5,[54,203,129],{"class":71},[54,205,207],{"class":56,"line":206},6,[54,208,210],{"emptyLinePlaceholder":209},true,"\n",[54,212,214,216,219,221,223,226],{"class":56,"line":213},7,[54,215,61],{"class":60},[54,217,218],{"class":64}," gratin",[54,220,68],{"class":60},[54,222,166],{"class":75},[54,224,225],{"class":60}," =",[54,227,101],{"class":71},[54,229,231,233,235],{"class":56,"line":230},8,[54,232,107],{"class":71},[54,234,111],{"class":110},[54,236,114],{"class":71},[54,238,240,242,245],{"class":56,"line":239},9,[54,241,120],{"class":71},[54,243,244],{"class":64},"4",[54,246,114],{"class":71},[54,248,250,253],{"class":56,"line":249},10,[54,251,252],{"class":71},"  vegetarien: ",[54,254,255],{"class":64},"true\n",[54,257,259],{"class":56,"line":258},11,[54,260,129],{"class":71},[41,262,263,264,267],{},"Par convention, le nom d'une interface commence par une majuscule. On lit ",[25,265,266],{},"Recette"," comme « un objet qui a ces trois propriétés ».",[10,269,271],{"id":270},"donner-un-nom-avec-type","Donner un nom avec type",[41,273,274,275,278,279,281],{},"Un ",[134,276,277],{},"alias de type"," fait la même chose avec le mot ",[25,280,31],{}," et un signe égal.",[45,283,285],{"className":47,"code":284,"language":49,"meta":50,"style":50},"type Ingredient = {\n  nom: string\n  quantite: number\n  unite: string\n}\n",[25,286,287,298,306,315,324],{"__ignoreMap":50},[54,288,289,291,294,296],{"class":56,"line":57},[54,290,31],{"class":60},[54,292,293],{"class":75}," Ingredient",[54,295,225],{"class":60},[54,297,101],{"class":71},[54,299,300,302,304],{"class":56,"line":104},[54,301,173],{"class":75},[54,303,68],{"class":60},[54,305,178],{"class":64},[54,307,308,311,313],{"class":56,"line":117},[54,309,310],{"class":75},"  quantite",[54,312,68],{"class":60},[54,314,188],{"class":64},[54,316,317,320,322],{"class":56,"line":126},[54,318,319],{"class":75},"  unite",[54,321,68],{"class":60},[54,323,178],{"class":64},[54,325,326],{"class":56,"line":201},[54,327,129],{"class":71},[41,329,330],{},"Un alias peut nommer n'importe quel type, pas seulement un objet. On le verra avec les unions dans le prochain cours.",[10,332,334],{"id":333},"propriétés-optionnelles-et-en-lecture-seule","Propriétés optionnelles et en lecture seule",[41,336,337,338,341],{},"Un point d'interrogation après le nom rend la propriété facultative. Le mot ",[25,339,340],{},"readonly"," interdit de la modifier après la création.",[45,343,345],{"className":47,"code":344,"language":49,"meta":50,"style":50},"interface Recette {\n  readonly id: number\n  nom: string\n  duree?: number\n}\n\nconst tarte: Recette = { id: 1, nom: \"Tarte aux pommes\" }\ntarte.id = 2        \u002F\u002F Erreur : lecture seule\ntarte.duree         \u002F\u002F number | undefined\n",[25,346,347,355,367,375,385,389,393,421,435],{"__ignoreMap":50},[54,348,349,351,353],{"class":56,"line":57},[54,350,27],{"class":60},[54,352,166],{"class":75},[54,354,101],{"class":71},[54,356,357,360,363,365],{"class":56,"line":104},[54,358,359],{"class":60},"  readonly",[54,361,362],{"class":75}," id",[54,364,68],{"class":60},[54,366,188],{"class":64},[54,368,369,371,373],{"class":56,"line":117},[54,370,173],{"class":75},[54,372,68],{"class":60},[54,374,178],{"class":64},[54,376,377,380,383],{"class":56,"line":126},[54,378,379],{"class":75},"  duree",[54,381,382],{"class":60},"?:",[54,384,188],{"class":64},[54,386,387],{"class":56,"line":201},[54,388,129],{"class":71},[54,390,391],{"class":56,"line":206},[54,392,210],{"emptyLinePlaceholder":209},[54,394,395,397,400,402,404,406,409,412,415,418],{"class":56,"line":213},[54,396,61],{"class":60},[54,398,399],{"class":64}," tarte",[54,401,68],{"class":60},[54,403,166],{"class":75},[54,405,225],{"class":60},[54,407,408],{"class":71}," { id: ",[54,410,411],{"class":64},"1",[54,413,414],{"class":71},", nom: ",[54,416,417],{"class":110},"\"Tarte aux pommes\"",[54,419,420],{"class":71}," }\n",[54,422,423,426,428,431],{"class":56,"line":230},[54,424,425],{"class":71},"tarte.id ",[54,427,98],{"class":60},[54,429,430],{"class":64}," 2",[54,432,434],{"class":433},"sd6ml","        \u002F\u002F Erreur : lecture seule\n",[54,436,437,440],{"class":56,"line":239},[54,438,439],{"class":71},"tarte.duree         ",[54,441,442],{"class":433},"\u002F\u002F number | undefined\n",[41,444,445,446,449],{},"Une propriété optionnelle peut valoir ",[25,447,448],{},"undefined",". TypeScript te force donc à gérer ce cas avant de t'en servir.",[451,452,453],"note",{},[41,454,455,457],{},[25,456,340],{}," n'existe que pour TypeScript. Il ne bloque rien à l'exécution : c'est un garde-fou à l'écriture.",[10,459,461],{"id":460},"des-objets-dans-des-objets","Des objets dans des objets",[41,463,464],{},"Les propriétés peuvent elles-mêmes être des types nommés ou des tableaux.",[45,466,468],{"className":47,"code":467,"language":49,"meta":50,"style":50},"interface Recette {\n  nom: string\n  ingredients: Ingredient[]\n  auteur: { nom: string; pseudo?: string }\n}\n",[25,469,470,478,486,498,524],{"__ignoreMap":50},[54,471,472,474,476],{"class":56,"line":57},[54,473,27],{"class":60},[54,475,166],{"class":75},[54,477,101],{"class":71},[54,479,480,482,484],{"class":56,"line":104},[54,481,173],{"class":75},[54,483,68],{"class":60},[54,485,178],{"class":64},[54,487,488,491,493,495],{"class":56,"line":117},[54,489,490],{"class":75},"  ingredients",[54,492,68],{"class":60},[54,494,293],{"class":75},[54,496,497],{"class":71},"[]\n",[54,499,500,503,505,507,509,511,513,515,518,520,522],{"class":56,"line":126},[54,501,502],{"class":75},"  auteur",[54,504,68],{"class":60},[54,506,72],{"class":71},[54,508,76],{"class":75},[54,510,68],{"class":60},[54,512,81],{"class":64},[54,514,84],{"class":71},[54,516,517],{"class":75},"pseudo",[54,519,382],{"class":60},[54,521,81],{"class":64},[54,523,420],{"class":71},[54,525,526],{"class":56,"line":201},[54,527,129],{"class":71},[41,529,530,533,534,537,538,541],{},[25,531,532],{},"Ingredient[]"," est un tableau d'objets de type ",[25,535,536],{},"Ingredient",". Tu peux donc écrire ",[25,539,540],{},"recette.ingredients[0].quantite"," et l'éditeur propose la bonne propriété.",[10,543,545],{"id":544},"étendre-une-interface","Étendre une interface",[41,547,548,549,32],{},"Pour construire un type à partir d'un autre, une interface utilise ",[134,550,551],{},"extends",[45,553,555],{"className":47,"code":554,"language":49,"meta":50,"style":50},"interface Recette {\n  nom: string\n  personnes: number\n}\n\ninterface RecetteDuJour extends Recette {\n  date: string\n}\n",[25,556,557,565,573,581,585,589,603,612],{"__ignoreMap":50},[54,558,559,561,563],{"class":56,"line":57},[54,560,27],{"class":60},[54,562,166],{"class":75},[54,564,101],{"class":71},[54,566,567,569,571],{"class":56,"line":104},[54,568,173],{"class":75},[54,570,68],{"class":60},[54,572,178],{"class":64},[54,574,575,577,579],{"class":56,"line":117},[54,576,183],{"class":75},[54,578,68],{"class":60},[54,580,188],{"class":64},[54,582,583],{"class":56,"line":126},[54,584,129],{"class":71},[54,586,587],{"class":56,"line":201},[54,588,210],{"emptyLinePlaceholder":209},[54,590,591,593,596,599,601],{"class":56,"line":206},[54,592,27],{"class":60},[54,594,595],{"class":75}," RecetteDuJour",[54,597,598],{"class":60}," extends",[54,600,166],{"class":64},[54,602,101],{"class":71},[54,604,605,608,610],{"class":56,"line":213},[54,606,607],{"class":75},"  date",[54,609,68],{"class":60},[54,611,178],{"class":64},[54,613,614],{"class":56,"line":230},[54,615,129],{"class":71},[41,617,618,621,622,624,625,627,628,631,632,635,636,32],{},[25,619,620],{},"RecetteDuJour"," possède ",[25,623,76],{},", ",[25,626,87],{}," et ",[25,629,630],{},"date",". Un alias fait la même chose avec une ",[134,633,634],{},"intersection",", notée ",[25,637,638],{},"&",[45,640,642],{"className":47,"code":641,"language":49,"meta":50,"style":50},"type RecetteDuJour = Recette & { date: string }\n",[25,643,644],{"__ignoreMap":50},[54,645,646,648,650,652,654,657,659,661,663,665],{"class":56,"line":57},[54,647,31],{"class":60},[54,649,595],{"class":75},[54,651,225],{"class":60},[54,653,166],{"class":75},[54,655,656],{"class":60}," &",[54,658,72],{"class":71},[54,660,630],{"class":75},[54,662,68],{"class":60},[54,664,81],{"class":64},[54,666,420],{"class":71},[10,668,670],{"id":669},"interface-ou-type-lequel-choisir","Interface ou type : lequel choisir",[41,672,673,674,676,677,679],{},"La documentation officielle donne un conseil simple : utilise ",[25,675,27],{}," tant que tu n'as pas besoin d'une fonction propre à ",[25,678,31],{},", comme nommer une union.",[681,682,683,700],"table",{},[684,685,686],"thead",{},[687,688,689,692,696],"tr",{},[690,691],"th",{},[690,693,694],{},[25,695,27],{},[690,697,698],{},[25,699,31],{},[701,702,703,714,727,737],"tbody",{},[687,704,705,709,712],{},[706,707,708],"td",{},"Décrire un objet",[706,710,711],{},"Oui",[706,713,711],{},[687,715,716,719,723],{},[706,717,718],{},"Étendre",[706,720,721],{},[25,722,551],{},[706,724,725],{},[25,726,638],{},[687,728,729,732,735],{},[706,730,731],{},"Nommer une union",[706,733,734],{},"Non",[706,736,711],{},[687,738,739,742,744],{},[706,740,741],{},"Être rouverte pour ajouter des propriétés",[706,743,711],{},[706,745,734],{},[41,747,748],{},"La dernière ligne s'appelle la fusion de déclarations : deux interfaces de même nom se fondent en une seule. Un alias déclaré deux fois produit une erreur.",[41,750,751],{},"Pour un débutant, la différence compte peu. Choisis l'un des deux et garde-le dans tout le projet.",[10,753,755],{"id":754},"un-objet-est-vérifié-selon-sa-forme","Un objet est vérifié selon sa forme",[41,757,758],{},"TypeScript compare la forme, pas le nom. Un objet qui possède les bonnes propriétés convient, même s'il n'a pas été créé avec ton interface.",[45,760,762],{"className":47,"code":761,"language":49,"meta":50,"style":50},"function afficher(recette: Recette) {\n  console.log(recette.nom)\n}\n\nafficher({ nom: \"Crêpes\", personnes: 6 })\n",[25,763,764,786,797,801,805],{"__ignoreMap":50},[54,765,766,769,773,776,779,781,783],{"class":56,"line":57},[54,767,768],{"class":60},"function",[54,770,772],{"class":771},"syCW7"," afficher",[54,774,775],{"class":71},"(",[54,777,778],{"class":75},"recette",[54,780,68],{"class":60},[54,782,166],{"class":75},[54,784,785],{"class":71},") {\n",[54,787,788,791,794],{"class":56,"line":104},[54,789,790],{"class":71},"  console.",[54,792,793],{"class":771},"log",[54,795,796],{"class":71},"(recette.nom)\n",[54,798,799],{"class":56,"line":117},[54,800,129],{"class":71},[54,802,803],{"class":56,"line":126},[54,804,210],{"emptyLinePlaceholder":209},[54,806,807,810,813,816,819,822],{"class":56,"line":201},[54,808,809],{"class":771},"afficher",[54,811,812],{"class":71},"({ nom: ",[54,814,815],{"class":110},"\"Crêpes\"",[54,817,818],{"class":71},", personnes: ",[54,820,821],{"class":64},"6",[54,823,824],{"class":71}," })\n",[41,826,827,828,831],{},"Un littéral d'objet passé directement est examiné de plus près : une propriété en trop, comme une faute de frappe sur ",[25,829,830],{},"personne",", est signalée.",[10,833,835],{"id":834},"fixer-des-valeurs-avec-as-const","Fixer des valeurs avec as const",[41,837,838,839,841,842,845],{},"Un objet déclaré avec ",[25,840,61],{}," voit ses propriétés rester modifiables. Pour obtenir des valeurs figées, ajoute ",[25,843,844],{},"as const"," après l'objet.",[45,847,849],{"className":47,"code":848,"language":49,"meta":50,"style":50},"const requete = { url: \"\u002Frecettes\", methode: \"GET\" } as const\n",[25,850,851],{"__ignoreMap":50},[54,852,853,855,858,860,863,866,869,872,874,877],{"class":56,"line":57},[54,854,61],{"class":60},[54,856,857],{"class":64}," requete",[54,859,225],{"class":60},[54,861,862],{"class":71}," { url: ",[54,864,865],{"class":110},"\"\u002Frecettes\"",[54,867,868],{"class":71},", methode: ",[54,870,871],{"class":110},"\"GET\"",[54,873,95],{"class":71},[54,875,876],{"class":60},"as",[54,878,879],{"class":60}," const\n",[41,881,882,883,886,887,890,891,893],{},"La propriété ",[25,884,885],{},"methode"," n'est alors plus un ",[25,888,889],{},"string"," quelconque, mais exactement ",[25,892,871],{},". Cette idée est le sujet du cours suivant.",[10,895,897],{"id":896},"à-retenir","À retenir",[15,899,900,906,915,924,932,941],{},[18,901,902,905],{},[25,903,904],{},"{ nom: string }"," décrit la forme d'un objet : propriétés et types.",[18,907,908,909,911,912,914],{},"Une ",[25,910,27],{}," ou un ",[25,913,31],{}," donne un nom à cette forme.",[18,916,917,920,921,923],{},[25,918,919],{},"?"," rend une propriété facultative, ",[25,922,340],{}," interdit de la modifier.",[18,925,926,928,929,931],{},[25,927,551],{}," pour une interface, ",[25,930,638],{}," pour un alias : les deux combinent des types.",[18,933,934,935,937,938,940],{},"Conseil officiel : ",[25,936,27],{}," par défaut, ",[25,939,31],{}," pour les unions.",[18,942,943],{},"TypeScript compare la forme des objets, pas leur nom.",[945,946,947],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}",{"title":50,"searchDepth":104,"depth":117,"links":949},[950,951,952,953,954,955,956,957,958,959,960],{"id":12,"depth":104,"text":13},{"id":38,"depth":104,"text":39},{"id":147,"depth":104,"text":148},{"id":270,"depth":104,"text":271},{"id":333,"depth":104,"text":334},{"id":460,"depth":104,"text":461},{"id":544,"depth":104,"text":545},{"id":669,"depth":104,"text":670},{"id":754,"depth":104,"text":755},{"id":834,"depth":104,"text":835},{"id":896,"depth":104,"text":897},"Décris la forme d'un objet avec un type objet, une interface ou un alias de type, puis choisis entre les deux.","md",{},[965,27,966,967,340,551,634,844],"objet","type alias","propriété optionnelle","debutant","\u002Fts\u002Fobjets-interfaces-types",[971],"\u002Fts\u002Ftypes-de-base",[973,977],{"nom":974,"url":975,"type":976},"Grafikart, formation TypeScript","https:\u002F\u002Fgrafikart.fr\u002Fformations\u002Ftypescript","cours",{"nom":978,"url":979,"type":980,"anglais":209},"Les types objet (en anglais)","https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002F2\u002Fobjects.html","doc",{"title":5,"description":961},[983,985],{"nom":984,"url":979},"Les types objet, documentation de TypeScript (en anglais)",{"nom":986,"url":987},"Les types courants, documentation de TypeScript (en anglais)","https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002F2\u002Feveryday-types.html","ts\u002F03.objets-interfaces-types","JGM3R-IKb8oKuC-psri78OnUm2Na8viKuLzdKIG-ABA",[991,995,998,999,1003,1007,1011],{"path":992,"title":993,"stem":994},"\u002Fts\u002Fpourquoi-typescript","Pourquoi TypeScript","ts\u002F01.pourquoi-typescript",{"path":971,"title":996,"stem":997},"Types de base et fonctions","ts\u002F02.types-de-base",{"path":969,"title":5,"stem":988},{"path":1000,"title":1001,"stem":1002},"\u002Fts\u002Funions-et-narrowing","Unions, littéraux et narrowing","ts\u002F04.unions-et-narrowing",{"path":1004,"title":1005,"stem":1006},"\u002Fts\u002Fgeneriques-et-utilitaires","Génériques et types utilitaires","ts\u002F05.generiques-et-utilitaires",{"path":1008,"title":1009,"stem":1010},"\u002Fts\u002Ftypescript-dans-vue-et-nuxt","TypeScript dans Vue et Nuxt","ts\u002F06.typescript-dans-vue-et-nuxt",{"path":1012,"title":1013,"stem":1014},"\u002Fts","TypeScript","ts\u002Findex",[1016,1018],{"title":996,"path":971,"stem":997,"description":1017,"children":-1},"Annote des variables avec string, number et boolean, laisse l'inférence travailler, puis type les paramètres et les retours de tes fonctions.",{"title":1001,"path":1000,"stem":1002,"description":1019,"children":-1},"Combine plusieurs types avec une union, restreins-les à des valeurs précises, puis affine le type avec typeof, in et les unions discriminées.",[1021],{"path":971,"title":996,"ligne":49},[1023,1024,1025,1026,1028,1029,1031],{"path":992,"title":993,"niveau":968,"stem":994},{"path":971,"title":996,"niveau":968,"stem":997},{"path":969,"title":5,"niveau":968,"stem":988},{"path":1000,"title":1001,"niveau":1027,"stem":1002},"intermediaire",{"path":1004,"title":1005,"niveau":1027,"stem":1006},{"path":1008,"title":1009,"niveau":1030,"stem":1010},"avance",{"path":1012,"title":1013,"niveau":1032,"stem":1014},"memo",1794583433625]