web-dev-qa-db-fra.com

Typescript: comment importer une classe à partir d'un fichier javascript?

J'aimerais :

  • Importez un fichier js qui définit une classe: ./myClass/index.js
  • Déclarez les méthodes publiques de MyClass quelque part (dans index.ts ou dans un fichier de déclaration spécifié, je ne sais vraiment pas comment le faire)
  • Avoir un fichier TypeScript qui expose la classe: index.ts

quelque chose comme

// index.ts
import MyClass from './myClass' // or require, or anything that would work
export {MyClass}

et

// myClass/index.js
export default class MyClass {
  ...
}

Cela ne fonctionne évidemment pas, car l'importation de ./myClass/index ne trouvera pas le module.

Le problème, c’est que j’ai essayé de créer un fichier ./myClass/index.d.ts basé sur cet exemple , mais quoi qu’il en soit, j’ai toujours un Erreur: Impossible de trouver le module './myClass/index.js' lors de l’exécution :(

Certaines notions de base de TypeScript me manquent, mais je cherche des ressources claires.

Des idées ?

8
aherve

Il n'y a pas de export default class en JavaScript. Ce que vous pouvez faire, c'est écrire votre fichier JS comme ceci. myClass/index.js

"use strict";
class MyClass {
  hello(name) {
    console.log(`Hello ${name}`);
  }

}
exports.default = MyClass;

Créez une définition de type pour cela. myClass/index.d.ts

export default class MyClass {
  hello(name: string): void;
}

Vous pouvez ensuite l'importer dans votre TypeScript comme ceci.

/// <reference path="./myClass/index.d.ts" />
import MyClass from "./myClass";

const my = new MyClass();
my.hello("Stack Overflow");
8
goenning

à la fin de votre fichier javascript, écrivez ceci

exports.MyClass = MyClass;

dans les fichiers ts

import * as  IzendaSynergy  from './izenda/izenda_ui.js';

ou

import { IzendaSynergy } from './izenda/izenda_ui.js';

dans le fichier tsconfig.json

  "allowJs": true
1
siva