web-dev-qa-db-fra.com

NodeJS Comment importer un fichier JS dans TypeScript

Je suis nouveau avec TypeScript. J'apprends actuellement NodeJS Loopback 4 framework qui utilise le langage TypeScript. Et ma question est de savoir comment importer une fonction, une classe qui a été exportée dans un fichier JS dans mon fichier TS. Après plusieurs recherches, mais cela ne fonctionne toujours pas avec moi. Voici un exemple:

  // /src/index.ts
    import {plus} from './lib/test';

    console.log(plus(1,2));

// /src/lib/test.js
    export function plus(x, y) {
      return x + y;
    }

J'essaie aussi d'utiliser la définition TypeScript comme ceci

// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;

Mais toujours une erreur lors de l'importation de cette fonction dans le fichier index.ts

Erreur: impossible de trouver le module './lib/test' dans Function.Module._resolveFilename (module.js: 543: 15)

3
Quoc Van Tang

Il semble que tsconfig.json n'ait pas activé "allowJs" car il exporte des déclarations.

Y a-t-il une raison pour laquelle vous ne voulez pas que ce soit un fichier TypeScript? Si vous changez test.js en test.ts, en le faisant un .ts devrait lui permettre d'être reconnu dans votre fichier d'index.

METTRE À JOUR

L'historique complet du chat pour arriver à ce point peut être trouvé ici . Référentiel utilisé pour tester trouvé ici

OK, une solution aussi simple que les mentions de @ maaz-syed-adeeb fonctionneront:

import { path } from './lib/test.js'

La raison pour laquelle l'extension est importante est que le fichier de définition a priorité sur un fichier javascript dans un environnement TypeScript. C'est pourquoi l'importation du module a explosé.

Pour éviter de spécifier le .js extension, vous pouvez également configurer votre structure de répertoire comme ceci:

src
|- index.ts
|- lib
  |- test.js
  |- test.d.ts
  |- index.[js|ts]

dans ./lib/index fichier tout exporter du test:

//./src/lib/index.[js|ts]
export * from './test'

puis importez tout depuis lib:

// ./src/index.ts
import { path } from './lib'
// or
import { path } from './lib/test.js'

Si vous utilisez un mélange de javascript et de TypeScript (par exemple, vous passez à TypeScript avec une base de code existante), vous devrez mettre à jour votre tsconfig.json à inclure pour ne pas recevoir les avertissements dans votre IDE:

{
  "compilerOptions": {
    "allowJs": true,
    "declaration": false
  }
}

C'est ainsi que vos fichiers javascript seront transposés dans votre répertoire de destination avec les fichiers TypeScript.

5
Christopher Slater