2017-07-05 1 views
2

Je deviens vraiment 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. J'ai appris que j'avais besoin d'un fichier de déclaration. J'ai donc ajouté un fichier json-loader.d.ts dans mon projet. Je l'ai également essayé à plusieurs niveaux (root, dossier typings, dossier custom_typings) car ce sont les solutions que j'ai trouvées. Le contenu du fichier ressemble à ceci:Importer un fichier JSON dans une application de noeud avec TypeScript

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 est impossible d'importer le fichier JSON, car il est pas un module. Alors, comment le compilateur s'aperçoit-il qu'il existe un tel fichier de déclaration?

je l'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 il ne fonctionne toujours pas. Aucune suggestion?

Merci!

+0

Pourriez-vous montrer aussi comment vous essayez d'importer le JSON? – guwere

+0

J'ai essayé: 'import * comme config de '../ config.json''. Devrait fonctionner quand JSON est manipulé comme un module je suppose ... –

Répondre

1

Exemples sur le Web qui utilisent declare module "*.json" travail parce Webpack est configuré pour charger des fichiers JSON.

Si vous ne voulez pas vous embêter avec cela, vous pouvez utiliser var au lieu de import:

var json = require('../config.json');

as suggested in this answer

+0

Merci. Cela marche. Seulement oublié d'exécuter ma tâche gulp qui a copié le fichier .json dans le répertoire dist ... (ツ) –

0

Avez-vous 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 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é . Et vous besoin de quelque chose comme ceci:

<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

C'est une application de noeud. Il n'y a pas de page web. J'aurais dû le mentionner ... désolé. –