web-dev-qa-db-fra.com

typescript déclare les modules tiers

Comment puis-je déclarer un module tiers qui ressemble à ceci:

dans le module tiers:

module.exports = function foo(){
  // do somthing
}

dans mon code:

import * as foo from 'foo-module'; // Can not find a declaration module for ...
foo();
7
Saman Mohamadi

Consultez la documentation sur l'utilisation de modules tiers .

L'écriture de la déclaration dépend beaucoup de la manière dont le module a été écrit et de ce qu'il exporte. L'exemple que vous avez donné n'est pas vraiment un module ES6 valide, car ES6 ne peut pas exporter une fonction en tant que module (il ne peut exporter que des membres de la fonction ou une fonction par défaut). 

Vous pouvez déclarer votre foo-example dans un fichier .d.ts comme ceci:

declare module "foo-module" {
  function foo(): void; 
  namespace foo { }
  export = foo;
}

Et importer comme vous le souhaitiez:

import * as foo from "foo-module";
foo();

Ou comme ceci:

import foo = require("foo-module");
foo();

La documentation a une bonne ressource sur les fichiers de déclaration et des modèles pour divers types de fichiers de déclaration .

11
Aaron

Vous déclarez cette fonction:

Déclarez var foo: any;

Cela dira à TypeScript que vous avez quelque part une fonction appelée foo que vous allez vous assurer d’être injectée sur le site.

0
Poku

J'avais un problème similaire. Et lutté pour ajouter la définition de type à mon projet. Finalement je l'ai fait pensé.

Ceci est un module (seulement avec des constantes), appelons-le some-module - node_modules/some-module/index.js.

'use strict';

exports.__esModule = true;
var APPS = exports.APPS = {
    ona: 'ona',
    tacq: 'tacq',
    inetAcq: 'inetAcq'
};

J'ajoute d'abord à tsconfig.json baseUrl et typeRoots

{
  ...
  "compilerOptions": {
    ...
    "baseUrl": "types",
    "typeRoots": ["types"]
  }
  ...
}

Deuxièmement, dans la racine de mon projet, je crée un dossier types avec la même structure de dossiers pour le module types/some-module/index.js et place le code:

declare module 'some-module' {
    type Apps =  {
        ona: string;
        tacq: string;
        inetAcq: string;
    };
    let APPS: Apps
}

Enfin, je peux l'importer dans mon my-file.ts avec des saisies!

import { APPS } from 'some-module';
0
Michael Klishevich