Comment résoudre l'erreur Node.js Typescript : "[ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts" ?

La version ES6 du langage JavaScript a introduit la notion de module dans le langage. Les modules permettent de regrouper des fichiers JavaScript en une librairie et de l'intégrer directement dans le langage (on devait passer par une balise HTML auparavant). Avant que les modules ESM, liés directement au langage JavaScript, soient implémentés, les frameworks et librairies ont créé leurs propres versions. C'est le cas pour le moteur d'exécution NodeJS avec les modules CommonJS. Lorsque le message d'erreur "Typescript : "[ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts"" apparaît lors de la compilation de l'application, c'est la gestion de ces deux types de module qui est en cause.

Pour utiliser le langage TypeScript avec NodeJS, vous devez installer un paquet appelé "ts-node". Si, lors du lancement de votre application, vous obtenez le message "Typescript : "[ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts"", cela vient du fait que ce paquet est un module CommonJS. Pour résoudre ce problème, la méthode dépend du fait que vous utilisez des modules ESM dans votre code ou non. Pour savoir si c'est le cas, cherchez la présence de la directive "import" dans votre code. Cette directive est utilisée pour importer un module ESM dans votre code.

Si vous n'utilisez pas module ESM, il suffit que vous retiriez la ligne suivante de votre fichier "package.json" :

"type": "module"

Si vous utilisez un ou plusieurs modules ESM, alors vous devez modifier le fichier de configuration du module "ts-node", "tsconfig.json". Ajoutez la configuration suivante pour prendre en charge les modules ESM.

{
    "compilerOptions": {
        "esModuleInterop": true,
    }
}

Pour lancer l'exécution de votre application, la commande n'est plus la même. On utilise la commande "ts-node-esm", qui prend en charge les modules ESM.

ts-node-esm mon_script.ts

JavaScript