Les Generics TypeScript Expliqués avec des Exemples

Pourquoi any fait-il perdre le type que vous avez passĂ© ? Typez un paramĂštre en any et TypeScript arrĂȘte de vĂ©rifier tout ce qui sort de la fonction : 1 2 3 4 5 6 function firstElement(arr: any[]): any { return arr[0]; } const n = firstElement([1, 2, 3]); n.toUpperCase(); // compile, plante Ă  l'exĂ©cution Vous savez que vous avez passĂ© un tableau de nombres. Le compilateur, non, car any lui dit d’arrĂȘter de regarder. n est de type any, donc appeler une mĂ©thode de string sur un number compile sans problĂšme et lĂšve TypeError: n.toUpperCase is not a function Ă  l’exĂ©cution. ...

27 octobre 2026 Â· 8 min Â· 1622 mots Â· SpaghettiCoder

Exceptions vs Valeurs d'Erreur : Quelle Stratégie Choisir

Ouvrez un fichier qui n’existe pas en Python, open() lĂšve un FileNotFoundError qui remonte hors de votre fonction. Faites la mĂȘme chose en Go, os.ReadFile vous renvoie une valeur error accompagnĂ©e d’un slice d’octets nil. MĂȘme Ă©chec, deux formes de code complĂštement diffĂ©rentes autour. La diffĂ©rence n’est pas cosmĂ©tique. Elle dĂ©cide si l’appelant peut ignorer l’échec par accident, et si le compilateur le repĂšre quand ça arrive. Qu’est-ce que les exceptions et les valeurs d’erreur font rĂ©ellement diffĂ©remment ? Une exception est un flux de contrĂŽle qui saute. Quelque chose Ă©choue, la fonction lĂšve, et l’exĂ©cution quitte la pile d’appels en cours pour atterrir dans le premier bloc catch ou except correspondant, peu importe le nombre de niveaux au-dessus. La signature de la fonction ne donne aucun indice que cela puisse arriver. loadConfig(path: string): Config en TypeScript ressemble exactement Ă  une fonction qui ne peut pas Ă©chouer, jusqu’à ce qu’elle lĂšve une exception pour un fichier manquant. ...

26 octobre 2026 Â· 8 min Â· 1674 mots Â· SpaghettiCoder

Git Worktree : travailler sur plusieurs branches Ă  la fois

Vous ĂȘtes en plein travail sur une branche de feature, trois fichiers modifiĂ©s, rien de commitĂ©, quand un collĂšgue vous signale un crash null-pointer en production. Le rĂ©flexe habituel : git stash, checkout de main, correction, push, puis git stash pop, en espĂ©rant que rien dans votre feature inachevĂ©e ne dĂ©pendait des fichiers que vous venez d’abandonner. git worktree Ă©vite cette gymnastique. Il fait le checkout de la branche de hotfix dans un second dossier, Ă  cĂŽtĂ© de votre branche de feature, les deux s’appuyant sur le mĂȘme dĂ©pĂŽt. ...

24 octobre 2026 Â· 6 min Â· 1080 mots Â· SpaghettiCoder

Rate Limiting d'API : Algorithmes et Comment le Construire

Un client coincĂ© dans une boucle de retry sans backoff peut mettre plus de charge sur votre API en une minute que vos dix mille autres clients rĂ©unis. De votre cĂŽtĂ©, ça ne ressemble pas Ă  une attaque. Ça ressemble Ă  un bug chez eux, et ça devient un incident chez vous. Un rate limiter bloque ce client avant qu’il n’en arrive lĂ . Que dĂ©cide vraiment un rate limiter ? À chaque requĂȘte, le rate limiter se pose une seule question : cette clĂ© a-t-elle fait trop de requĂȘtes dans la fenĂȘtre actuelle ? Trois choix transforment cette question en quelque chose d’implĂ©mentable. ...

23 octobre 2026 Â· 8 min Â· 1628 mots Â· SpaghettiCoder

Function Calling et Tool Use dans les LLM, Expliqués

Ce que fait rĂ©ellement le function calling dans un LLM Demandez Ă  un modĂšle « quel temps fait-il Ă  Austin en ce moment » sans aucune connexion au monde extĂ©rieur, et il n’a que deux options : dire qu’il ne sait pas, ou inventer quelque chose. Le function calling lui offre une troisiĂšme option. Il dĂ©crit ce dont il a besoin, transmet cette description Ă  votre code et attend une vraie rĂ©ponse avant de rĂ©pondre Ă  son tour. ...

22 octobre 2026 Â· 8 min Â· 1640 mots Â· SpaghettiCoder

Intersection Observer : Lazy Loading et Scroll Infini

Un listener scroll sur window peut se dĂ©clencher des centaines de fois pendant un seul swipe. Si vous exĂ©cutez getBoundingClientRect() sur chaque carte d’un feed Ă  chacun de ces Ă©vĂ©nements, cinquante images suffisent Ă  faire ralentir la page. L’Intersection Observer API retire cette vĂ©rification du scroll : vous enregistrez les Ă©lĂ©ments Ă  observer, et le navigateur vous prĂ©vient quand leur visibilitĂ© change rĂ©ellement. Comment fonctionne IntersectionObserver Un observer surveille un ou plusieurs Ă©lĂ©ments target par rapport Ă  un root (le viewport, par dĂ©faut) et appelle une callback chaque fois qu’un target franchit un seuil de visibilitĂ©. ...

21 octobre 2026 Â· 6 min Â· 1160 mots Â· SpaghettiCoder

Qu'est-ce qu'Unicode et Comment Fonctionne l'UTF-8

Ouvrez un fichier enregistrĂ© en UTF-8 avec un outil qui suppose un autre encodage, et cafĂ© devient café. Les octets sur le disque n’ont pas changĂ©. Seule la rĂšgle utilisĂ©e pour les retransformer en caractĂšres a changĂ©, et les deux rĂšgles ne sont pas d’accord sur ce que signifie l’octet 0xC3. La plupart des bugs de “caractĂšres bizarres” partagent la mĂȘme origine : noms de fichiers cassĂ©s, formulaires illisibles, un emoji qui fait Ă©chouer un insert en base de donnĂ©es, deux chaĂźnes identiques Ă  l’Ɠil mais diffĂ©rentes Ă  la comparaison. Dans chaque cas, on confond deux choses distinctes : Unicode et UTF-8. ...

20 octobre 2026 Â· 9 min Â· 1708 mots Â· SpaghettiCoder

Les Closures en JavaScript Expliquées avec des Exemples

Qu’est-ce qu’une closure en JavaScript ? 1 2 3 4 5 6 7 8 9 10 11 12 function makeCounter() { let count = 0; return function () { count += 1; return count; }; } const counter = makeCounter(); console.log(counter()); // 1 console.log(counter()); // 2 console.log(counter()); // 3 makeCounter s’exĂ©cute une fois, renvoie une fonction, et c’est tout : son stack frame n’existe plus. Pourtant, chaque appel Ă  counter() lit et met Ă  jour count, une variable dĂ©clarĂ©e Ă  l’intĂ©rieur d’une fonction dĂ©jĂ  terminĂ©e. count ne revient pas Ă  0, et n’est pas copiĂ©e. C’est la mĂȘme variable, toujours vivante, trois appels plus tard. ...

19 octobre 2026 Â· 7 min Â· 1417 mots Â· SpaghettiCoder

Qu'est-ce que le TDD et Comment Marche le Red-Green-Refactor

Un test Ă©crit aprĂšs le code tend Ă  vĂ©rifier ce que le code fait, pas ce qu’il Ă©tait censĂ© faire. Le dĂ©veloppement pilotĂ© par les tests (TDD) corrige cela en inversant l’ordre : vous Ă©crivez le test, vous le regardez Ă©chouer, puis vous Ă©crivez le plus petit bout de code qui le fait rĂ©ussir. Comme le test existe avant le code qu’il vĂ©rifie, il ne peut pas valider silencieusement tout ce que le code renvoie. Kent Beck a formalisĂ© cette boucle sous le nom red, green, refactor dans son livre de 2002 Test-Driven Development: By Example. Le nom est restĂ©. ...

18 octobre 2026 Â· 8 min Â· 1512 mots Â· SpaghettiCoder

npm vs Yarn vs pnpm : Quel Gestionnaire de Paquets Choisir

Lancez npm install sur un projet, puis pnpm install sur le mĂȘme package.json : vous obtenez deux arborescences node_modules diffĂ©rentes et deux lockfiles diffĂ©rents. Ajoutez un collĂšgue qui utilise Yarn, et le dĂ©pĂŽt finit avec trois lockfiles dans son historique, chacun dĂ©crivant une arborescence de dĂ©pendances lĂ©gĂšrement diffĂ©rente. Les trois lisent le mĂȘme package.json et tĂ©lĂ©chargent depuis le mĂȘme registre npm. Ce sur quoi ils ne sont pas d’accord, c’est ce qu’il faut Ă©crire sur le disque. ...

17 octobre 2026 Â· 8 min Â· 1545 mots Â· SpaghettiCoder