Expertise · TypeScript et développement assisté par l’IA
TypeScript ne fiabilise pas par magie le code produit par un LLM. Il donne toutefois à l’agent les contrats actuels du projet et lui signale immédiatement certaines erreurs mécaniques, avant la review humaine.
Le standard de fait
Un choix courant pour les produits web modernes
En août 2025, TypeScript est devenu le langage le plus utilisé sur GitHub selon le nombre de contributeurs mensuels. Cette mesure ne résume pas toute l’industrie, mais elle confirme une évolution déjà visible dans les équipes produit : le JavaScript typé fait désormais partie de l’outillage habituel.
TypeScript s’utilise pour le code navigateur, React et Next.js, les API Node.js, les workers et une grande partie de l’outillage. Une équipe peut ainsi travailler dans le même langage de l’interface au serveur. Ce confort s’arrête aux frontières d’exécution : une interface TypeScript ne vérifie pas à elle seule le JSON reçu depuis une API, une base de données ou un LLM.
Pourquoi en faire le choix par défaut
Le bénéfice dépasse l’autocomplétion. Les types rendent une partie des attentes du projet lisible par les développeurs, l’éditeur et les agents de code.
- Un écosystème largement documenté et déjà familier aux équipes web.
- Des contrats explicites entre composants, services et bibliothèques.
- Des diagnostics disponibles dans l’éditeur, en local et dans la CI.
Le développement avec un agent
Un LLM propose du code, le compilateur le compare au projet
Un modèle génère du code plausible. Il peut inventer une propriété, oublier une branche d’une union ou utiliser l’ancienne signature d’une fonction. Le compilateur ne sait pas si la fonctionnalité est pertinente, mais il peut confronter le diff aux contrats présents dans le dépôt.
Les agents connaissent bien les API et les patterns courants de l’écosystème TypeScript. Cela accélère une première proposition, sans garantir qu’elle corresponde à la version installée ou aux conventions locales. Les diagnostics du type checker les ramènent alors au code qui existe réellement dans le projet.
Contexte proche de l’usage
Les signatures, génériques et types de retour précisent les formes attendues sans devoir les recopier intégralement dans le prompt.
Diagnostics exploitables
Le compilateur indique le fichier, la ligne et le contrat qui ne correspond plus. L’agent peut repartir de cette information précise.
Impact d’un refactor visible
La modification d’un type partagé fait remonter les appels à adapter, y compris dans des fichiers absents du premier diff.
Cas oubliés signalés
Un contrôle d’exhaustivité sur une union discriminée fait échouer le typecheck lorsqu’une variante déclarée n’est pas traitée.
Le type checker répond à une question limitée : ce code est-il compatible avec les contrats déclarés ? Il ne valide pas le besoin produit, mais sa réponse est rapide et reproductible.
La boucle de feedback
Générer un petit diff, vérifier, puis faire relire
Une tâche adaptée à un agent porte sur un objectif précis. Elle indique le comportement attendu, les fichiers concernés et les contraintes à préserver. Le premier diff peut alors être confronté aux commandes habituelles du dépôt plutôt qu’à une description abstraite du projet.
Les erreurs de tsc --noEmit donnent à l’agent une liste concrète de corrections. Une fois les vérifications automatiques passées, la review se concentre sur le reste : le comportement attendu, la lisibilité, les risques d’exploitation et la pertinence des tests.
Tâche cadrée
Un objectif, des critères d’acceptation et un périmètre explicite.
Diff TypeScript
L’agent suit les contrats et les conventions déjà présents dans le dépôt.
Vérifications du projet
Typecheck, lint, tests et build exposent les régressions détectables automatiquement.
Review humaine
Une personne relit le comportement, les compromis et les effets de bord avant le merge.
import { tool } from 'ai'
import { z } from 'zod'
export const searchPlaces = tool({
description: 'Rechercher des établissements par nom',
inputSchema: z.object({
query: z.string().min(2),
limit: z.number().int().min(1).max(20),
}),
execute: async ({ query, limit }) => {
return searchPlacesInDatabase({ query, limit })
},
})Dans cet exemple avec l’AI SDK, le schéma décrit et valide l’entrée de l’outil, puis fournit le type des paramètres de la fonction execute. Il ne vérifie pas que la personne peut effectuer cette recherche, ni que les résultats doivent lui être accessibles. Ces règles restent dans le code serveur.
Les bibliothèques TypeScript pour l’IA
Deux options TypeScript, les mêmes limites à l’exécution
L’AI SDK de Vercel fournit une API commune aux fournisseurs pris en charge, des sorties structurées, des outils validés par schéma et des primitives UI pour React et Next.js. Les fonctionnalités disponibles et leur comportement dépendent néanmoins du fournisseur et du modèle choisis.
TanStack AI propose un cœur indépendant du framework, des outils typés, du streaming et des adaptateurs pour plusieurs fournisseurs. Le projet est actuellement en bêta, ce qui compte dans une décision d’architecture et dans le niveau de maintenance à prévoir.
01
Valider les données externes
Zod, Valibot ou JSON Schema peuvent refuser un appel mal formé. Les contrôles métier, comme vérifier qu’un utilisateur peut accéder à la ressource ou que la plage de dates est cohérente, restent explicites dans le service.02
Limiter le contrat de chaque outil
Un outil avec peu de paramètres, des noms précis et un résultat documenté est plus simple à appeler, tester et faire évoluer qu’une fonction générique exposant tout un service.03
Relire le comportement obtenu
Un diff qui compile peut encore choisir la mauvaise API, masquer une erreur ou ajouter une dépendance inutile. La review porte sur ces décisions, pas seulement sur la forme du code.
Un même schéma peut valider les arguments d’un outil et typer sa fonction execute lorsqu’il s’agit exactement du même contrat. Il ne faut pas pour autant fusionner les modèles d’API, de domaine et de stockage uniquement pour éviter quelques lignes de mapping.
Les limites utiles
Un typecheck vert ne suffit pas à valider une fonctionnalité
Avec le mode strict activé, le compilateur détecte une propriété absente, une valeur undefined non traitée ou une réponse incompatible. Il ne sait pas si une règle métier est juste, si un utilisateur est autorisé à agir ou si une requête renvoie les bonnes données. Ces points demandent des validations à l’exécution, des tests ciblés et une review attentive.
Ce que TypeScript apporte réellement
Un retour rapide sur une classe précise d’erreurs fréquentes dans les changements générés comme dans ceux écrits à la main.
- Les incompatibilités entre signatures peuvent être détectées avant le déploiement.
- Modifier un type fait apparaître les consommateurs qui doivent aussi être adaptés.
- Les outils IA peuvent associer validation runtime et inférence statique à partir d’un schéma.
- any, les assertions de type et les données non validées peuvent toujours contourner ces garanties.
À retenir
TypeScript donne aux agents de code un écosystème familier et, surtout, les contrats propres au dépôt sur lequel ils travaillent. Son compilateur aide à corriger les incompatibilités mécaniques plus tôt. L’équipe reste responsable du comportement livré.
Sources et documentation
- Octoverse 2025: AI leads TypeScript to #1. GitHub. Données et méthodologie sur l’usage de TypeScript en 2025.
- TypeScript: JavaScript with syntax for types. TypeScript. Présentation officielle du langage, de son inférence et de son adoption progressive.
- TSConfig: strict et noEmit. TypeScript. Référence des contrôles stricts et du compilateur utilisé pour le typecheck.
- AI SDK Core: Tools and tool calling. Vercel AI SDK. Schémas d’entrée, validation des appels et inférence des paramètres.
- AI SDK introduction. Vercel AI SDK. Vue d’ensemble actuelle du toolkit TypeScript et des API Core et UI.
- TanStack AI overview. TanStack. Documentation du cœur typé, des outils et des adaptateurs.
- TanStack AI Beta. TanStack. Statut actuel du projet et implications de sa phase bêta.
