web-dev-qa-db-fra.com

Importer un fichier JSON dans une application de noeud avec TypeScript

Je suis vraiment en train de devenir fou parce que je ne trouve pas de solution pour cela . Ce que je veux archiver, c'est importer un fichier JSON avec une configuration dans mon fichier TypeScript . fichier de déclaration. J'ai donc ajouté un fichier json-loader.d.ts à mon projet. Je l'ai également essayé à plusieurs niveaux (racine, dossier typings, dossier custom_typings) car ce sont les solutions que j'ai trouvées . Le contenu du fichier ressemble à ceci:

declare module "json!*" {
    let json: any;
    export = json;
}

declare module "*.json" {
    const value: any;
    export default value;
}

Mais le compilateur me dit toujours qu'il n'est pas possible d'importer le fichier JSON car ce n'est pas un module ..__ Alors, comment le compilateur est-il informé qu'il existe un tel fichier de déclaration?

J'ai déjà essayé de modifier mon tsconfig.json comme ceci:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "typeRoots": [
      "./node_modules/@types",
      "./typings"
    ]
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]  
}

Mais ça ne marche toujours pas. Aucune suggestion?

Merci!

5
Patrick P.

J'ai utilisé avec succès les éléments suivants pour importer mon package.json dans un programme CLI (afin de pouvoir réutiliser les informations de version, de licence et de description contenues dans ma page d'aide).

declare module '*.json' {
  const foo: {
    name: string;
    version: string;
    author: string;
    license: string;
    description: string;
  };
  export = foo;
}

Vous pouvez également importer d'autres fichiers contenant des descriptions d'interface, etc., mais vous devez placer les déclarations imports inside la module, par exemple.

declare module 'ormconfig.json' {
  import { Connection } from "typeorm";

  const foo: Connection[];
  export = foo;
}

1
Erik Vullings

Avez-vous déjà fait quelque chose comme ajouter un script SystemJS dans votre page Web pour charger le module - index.html etc. J'ai utilisé https://cdnjs.com/libraries/systemjs et iirc dont vous avez besoin https: // cdnjs.cloudflare.com/ajax/libs/systemjs/0.20.14/system.src.js System.JS est le chargeur de module .. Doit être le premier script importé . Ensuite vous avez besoin de quelque chose comme ça:

    <script
   src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.20.14/system.src.js "/>
    <script>
       System.config({
         defaultJSExtension:true
       });
      System.import('pathtoscriptwithoutdotjsatend');
   </script>
0
JGFMK