
Pour pouvoir écrire en TypeScript, il nous faut créer un fichier⊠TypeScript !
Si les fichiers JavaScript ont pour extension .js, câest tout aussi simple pour les fichiers TypeScript : leur extension est .ts ! PlutĂŽt intuitif, nâest-ce pas ?
Si vous avez suivi le chapitre prĂ©cĂ©dent, vous devriez dĂ©jĂ avoir un fichier my-file.ts. Si ce nâest pas le cas, ce nâest pas grave : nous allons de toute façon effacer son contenu pour repartir de zĂ©ro, alors crĂ©ez simplement un nouveau fichier !
Je vous demanderai donc de copier-coller le code JavaScript ci-dessous dans votre fichier .ts :
function addition(x, y) {
return x + y;
}
const result = addition('10', '20');
console.log(result);Ici, nous avons donc du code JavaScript assez classique : une fonction addition qui fait la somme de deux nombres. Si vous essayez de compiler ce code (via la commande  npx tsc my-file.ts  ), vous verrez que le fichier JavaScript généré est pour ainsi dire identique :
function addition(x, y) {
return x + y;
}
var result = addition('10', '20');
console.log(result);En gros, seul le mot-clé const a été remplacé par var .
Et si je veux garder const ?
Vous pouvez changer ce comportement via lâoption --target : npx tsc my-file.ts --target es6 . Vous pouvez en savoir plus dans la documentation officielle, mais je vous invite Ă ne pas vous attarder sur ce genre de dĂ©tail pour le moment !
Si vous en doutiez encore, voici donc la preuve quâun code JavaScript basique est du code TypeScript fonctionnel : le compilateur a tout compris et a gĂ©nĂ©rĂ© le JavaScript sans aucun souci !
Bon, et si on ajoutait enfin des types Ă notre fonction addition ? Vraisemblablement, nous souhaitons quâelle nâaccepte que des nombres en tant que paramĂštres. Pour ce faire, nous ajoutons la syntaxe :number à droite de ces paramĂštres :
function addition(x: number, y: number) {
return x + y;
}
const result = addition('10', '20');
console.log(result);ArrĂȘtons-nous quelques secondes sur cette nouvelle syntaxe.
Pour indiquer un type, la syntaxe principale est le caractĂšre :  suivi du type en question. Lâespace aprĂšs  :  est optionnel, vous nâĂȘtes pas obligĂ© de le mettre.

Pour commencer, retenez que TypeScript propose ces trois types basiques (appelés aussi types primitifs) :
number (pour les nombres).
string (pour les chaßnes de caractÚres).
Et boolean (pour les valeurs true et false ).Â
Juste en ajoutant ces  : number  à droite de nos paramĂštres, TypeScript sait que notre fonction addition sâattend Ă recevoir des nombres.
Il est Ă©galement possible de dĂ©finir le type de la valeur retournĂ©e par la fonction : pour ce faire, il suffit de rĂ©utiliser ce fameux  : number  aprĂšs la liste des paramĂštres, juste avant lâaccolade ouvrante :
function addition(x: number, y: number):number {
return x + y;
}
const result = addition('10', '20');
console.log(result);GrĂące Ă cette indication du type de retour, TypeScript sait que result est forcĂ©ment un nombre. On peut cela dit ĂȘtre plus explicite en lâindiquant clairement. Comment ? Eh bien, toujours grĂące Ă la fameuse annotation :number !
function addition(x: number, y: number): number {
return x + y;
}
const result:number = addition('10', '20');
console.log(result);Câest terminĂ© : notre petit code JavaScript est dĂ©sormais devenu un joli code typĂ© avec TypeScript. Ce nâĂ©tait pas si difficile, pas vrai ?
Tentons maintenant de compiler le code (pour rappel, via la commande  npx tsc my-file.ts  ) :

Rassurez-vous, câĂ©tait totalement prĂ©vu ! Car ceci permet de faire la transition parfaite vers notre prochaine section : comment lire, comprendre et corriger cette erreur remontĂ©e par TypeScript ?
Lâune des compĂ©tences essentielles lorsquâon dĂ©veloppe en TypeScript est de comprendre ce quâessaie de nous dire le langage. Il nous crie dessus, ça ne fait pas plaisir, câest vrai⊠Mais essayons dâanalyser ce qui lâembĂȘte dans notre code. Je remets ici lâerreur quâil nous remonte :

Lorsquâon essaie de compiler ce code, lâerreur qui en rĂ©sulte commence ainsi :
> my-file.ts:4:32
TypeScript nous indique le nom du fichier qui concerne lâerreur, puis le numĂ©ro de la ligne impactĂ©e, ainsi que la colonne. Juste avec ce dĂ©but dâinformation, nous apprenons donc que lâerreur se trouve dans le fichier my-file.ts (ça on pouvait le deviner nous-mĂȘme đŹ). GrĂące Ă lâindication  4:32 , on sait que le problĂšme survient au niveau de la ligne 4, et encore plus prĂ©cisĂ©ment Ă partir du 32e caractĂšre de cette ligne :

On peut donc en dĂ©duire que TypeScript nâaime pas le '10' . Mais pourquoi ? Continuons la lecture de lâerreur :
> - error TS2345
Ici, TypeScript nous confirme quâil sâagit dâune vĂ©ritable erreur (on aurait pu avoir une simple alerte), et il prĂ©cise cette Ă©trange valeur : TS2345. Que cette suite de lettres et de chiffres ne vous fasse pas peur, il sâagit simplement dâun code dâerreur. Un code de ce genre est associĂ© Ă chaque erreur que peut remonter TypeScript, ce qui permet de facilement les identifier. Cela simplifie la recherche dâinformations et la communication entre les dĂ©veloppeurs.
Attends⊠Ăa veut dire que je dois connaĂźtre tous les codes possibles?! đš
Heureusement que non ! Cela serait mĂȘme totalement inutile, puisque TypeScript ajoute une description plus dĂ©taillĂ©e de lâerreur, juste aprĂšs ce code :
> Argument of type 'string' is not assignable to parameter of type 'number'.
Ici, le message dâerreur indique que nous envoyons une string (une chaĂźne de caractĂšres) alors que le paramĂštre sâattend Ă recevoir un nombre (comme on lâa dĂ©fini ensemble). La solution est donc dâenlever les apostrophes autour des nombres que lâon envoie Ă la fonction addition , afin de lui envoyer de vĂ©ritables nombres, et non plus des strings :
function addition(x: number, y: number): number {
return x + y;
}
const result:number = addition(10, 20);
console.log(result);Lancez Ă nouveau une compilation : tout devrait ĂȘtre dĂ©sormais rentrĂ© dans lâordre ! Et si vous ouvrez le fichier my-file.js gĂ©nĂ©rĂ©, vous pouvez constater que le JavaScript Ă©crit nâa pas changĂ©. Preuve une fois de plus que TypeScript nâest lĂ que pour vous aiguiller durant le dĂ©veloppement (quitte Ă vous disputer un petit peu !).
Lâerreur remontĂ©e ici par TypeScript Ă©tait assez claire Ă comprendre, mais je dois vous avouer quelque chose : lorsque le code est plus compliquĂ©, il est possible que les messages de lâoutil soient un peu plus cryptiques Ă comprendre.
Jusque-là , notre exemple est plutÎt simple, car notre fonction ne manipule que des nombres. Essayons de complexifier tout ça !
Pour ce faire, nous allons une fonction qui vise à endommager un personnage de jeu vidéo. Voyons tout cela en vidéo et ensuite vous trouverez le récapitulatif de la manipulation :
Allez on récapitule ? C'est parti !
Cette fonction prend en premier paramÚtre le personnage à blesser, et en deuxiÚme paramÚtre le total de blessures. Sa valeur de retour est le nouveau total de points de vie du personnage :
function damage(characterToDamage, amount: number): number {
characterToDamage.life -= amount;
return characterToDamage.life;
}
const result = damage({ life: 100 }, 12);
console.log(result);Dans cet exemple,  characterToDamage nâa pas encore de type : comment faire pour le typer correctement ?
Ce paramĂštre est utilisĂ© comme un objet : on essaie en effet de manipuler sa propriĂ©té life via characterToDamage.life . Pour dĂ©finir quâune variable est un objet, TypeScript utilise la mĂȘme syntaxe que JavaScript, Ă savoir des accolades :
function damage(characterToDamage: {}, amount: number): number {```Juste en appliquant ce changement, TypeScript nous signale cette erreur :
> Property 'life' does not exist on type '{}'.Comme on vient de le voir, on essaye de manipuler la propriété life , mais TypeScript ne sait pas encore que characterToDamage la possÚde : il faut donc le lui dire !
function damage(characterToDamage: { life: number }, amount: number): number {```Et câest tout ! Le code complet devient donc :
function damage(characterToDamage: { life: number }, amount: number): number {
characterToDamage.life -= amount;
return characterToDamage.life;
}
const result = damage({ life: 100 }, 12);
console.log(result);Amusez-vous Ă modifier lâappel Ă la fonction damage en envoyant des arguments erronĂ©s. Essayez par exemple  damage({ life: 'douze' }, 12)  ,  damage({ vie: 100 }, 12)  , ou encore  damage({ life: 100, magic: 20 }, 12)  : TypeScript rĂ©agit Ă chaque fois en vous alertant sur les erreurs quâil dĂ©tecte. PlutĂŽt sympa dâavoir un outil qui nous prĂ©vient de la sorte, non ? đ

Voici un petit exercice concret pour vous faire manipuler un peu TypeScript.
Votre mission, si vous lâacceptez, est de modifier le code ci-dessous afin de corriger toutes les erreurs quâil contient.
// Ne modifiez que le typage TypeScript, ne touchez pas au code JavaScript !
function sayHello(target: { firstName: string, money: true }): number {
return `Hello ${target.firstname}, you have ${target.money} on your bank account.`;
}
const message: boolean = sayHello({ firstname: 'World', money: 123 });Pour indiquer des types basiques à nos variables, on utilise la syntaxe  :  + le nom du type en minuscules.
TypeScript retourne des messages dâerreurs qui se veulent ĂȘtre le plus prĂ©cis possible.
La syntaxe pour dĂ©clarer le type dâun objet est trĂšs proche de celle de JavaScript.
Nous avons donc ajoutĂ© des types dans notre code, nous avons mĂȘme vu comment typer des paramĂštres plus complexes, comme les objets : et si nous allions encore plus loin en crĂ©ant nos propres types rien quâĂ nous ?