Introduction : "Votre fichier .ts ne s'ouvre pas ? Vous n'êtes pas seul"
\n\nImaginez : vous écrivez du code génial en TypeScript, vous enregistrez le fichier avec l'extension .ts, vous exécutez la commande node myfile.ts... et vous obtenez en réponse quelque chose comme : "Unknown file extension ".ts". Familier ? Si vous avez jeté un œil sur Stack Overflow, vous savez que cette question a rassemblé des milliers de vues et des centaines de commentaires. Le problème est ancien, mais toujours d'actualité.
Dans cet article, nous ne nous contenterons pas de copier une réponse de forum. Nous allons analyser pourquoi cela se produit, comment le corriger, et que faire pour ne plus jamais rencontrer cette erreur. Vous apprendrez à configurer correctement un projet TypeScript, à utiliser ts-node et la configuration tsconfig.json. C'est parti !
Pourquoi l'erreur "Unknown file extension ".ts" se produit-elle ?
\n\nAllons droit au but. Node.js ne comprend pas les fichiers .ts par défaut. Il ne connaît que .js, .json, .mjs et .cjs. Lorsque vous écrivez node myfile.ts, Node.js essaie honnêtement d'exécuter le code TypeScript comme du JavaScript ordinaire, mais se heurte à une syntaxe qui lui est inconnue (par exemple, les types, les interfaces, les génériques).
Le résultat : une erreur. Mais il existe une autre situation : vous utilisez ts-node ou tsx, mais vous voyez toujours le même message. Pourquoi ? Parce que dans les versions modernes de Node.js (à partir de la version 16), une vérification stricte des extensions a été ajoutée dans package.json, surtout lorsque "type": "module" est défini.
Causes principales :
\n- \n
- Exécution directe de
node file.ts— Node.js ne sait pas compiler TypeScript à la volée. \n - Absence de
ts-nodeoutsx— aucun outil de transpilation. \n - Configuration incorrecte de
tsconfig.json— par exemple, module ou target non spécifié. \n - Problèmes avec
package.json— si"type": "module"est défini,ts-nodepeut exiger une indication explicite de l'extension. \n
Solution 1 : Utiliser ts-node (méthode classique)
\n\nLa façon la plus simple d'exécuter TypeScript sans compilation préalable est d'utiliser ts-node. C'est un package qui compile les fichiers .ts en mémoire et transmet le résultat à Node.js.
Installation et exécution
\nnpm install -g ts-node\nts-node myfile.ts\n\nSi vous utilisez un projet local, il est préférable de l'installer comme dépendance de développement :
\nnpm install --save-dev ts-node\nnpx ts-node myfile.ts\n\nExemple d'un fichier simple hello.ts :
const greet = (name: string): string => {\n return `Bonjour, ${name}!`;\n};\n\nconsole.log(greet("Monde"));\n\nExécutez : npx ts-node hello.ts — et vous voyez dans la console "Bonjour, Monde!". Ça marche !
Mais il y a un hic : "type": "module"
\nSi dans votre package.json est spécifié "type": "module", alors ts-node peut refuser de fonctionner. Dans ce cas, vous devez soit supprimer temporairement cette ligne, soit utiliser le drapeau --esm :
npx ts-node --esm myfile.ts\n\nSolution 2 : Utiliser tsx (outil moderne)
\n\ntsx est une alternative plus rapide à ts-node, basée sur esbuild. Elle fonctionne avec ESM dès le départ et ne nécessite pas de drapeaux supplémentaires.
Installation :
\nnpm install --save-dev tsx\n\nExécution :
\nnpx tsx myfile.ts\n\nExemple utilisant les fonctionnalités modernes de TypeScript :
\n// types.ts\nexport interface User {\n id: number;\n name: string;\n email: string;\n}\n\nconst user