Por lo que el código es simple:

llamadas.json

{"SERVER":{
    "requests":{
      "one":"1"
    }
} }

archivo.ts

import json = require('../static/calls.json');
console.log(json.SERVER);

javascript generado es correcto y cuando se ejecuta el nodo js server, el registro de la consola de json.SERVIDOR de impresiones ‘{ solicitudes: { uno: ‘1’ } }’, como debe ser.

El manuscrito compilador (commonjs) sin embargo, de alguna manera no gusta especialmente esta situación y lanza: «No se puede encontrar el módulo ‘../static/llamadas.json'».

Por supuesto he intentado escribir una .d.archivo ts, como este:

declare module '../static/calls.json'{
    var exp:any;
    export = exp;
}

esto, obviamente, lanza: «Ambiente módulo de declaración no se puede especificar la relación del módulo de nombre».

También probé con diferentes variantes, como:

declare module 'calls.json' {
    import * as json from '/private/static/calls.json';
    export = json;
}

y, a continuación, que requiere:

import json = require('calls.json');

Ninguno funciona correctamente y tener su propio compilador de errores 🙂

Quiero para uso externo .archivo json porque yo uso commonjs serverside y amd clientside y quiero un solo archivo para la carga constantes.

InformationsquelleAutor Ken | 2015-10-05

6 Comentarios

  1. 76

    Uso var en lugar de import.

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

    Se carga un archivo JSON, no es un módulo, por lo que import no debe ser utilizado en este caso. Cuando var se utiliza, require() es tratado como una función normal de nuevo.

    Si usted está usando un Node.js definición, todo debería funcionar, de lo contrario require tendrá que ser definido.

    • Esto iba a funcionar, a pesar de que estoy usando requirejs clientside. Esto significa que cuando la carga de la requirejs definición, la declaró var requieren en la definición de nodo causa problemas, ya que un var requieren también fue declarada en necesario.d.ts…
    • Sí, de la que se espera cuando ambas definiciones se hace referencia a la vez. Que también sería el caso en tiempo de ejecución también. Nunca sería el uso de ambos require al mismo tiempo. La solución rápida es tener ese archivo no hacer referencia a cualquiera de ellos y sólo uso declare var require: any;.
    • buenos comentarios, voy a la tela una solución…
    • Podría elaborar su respuesta? Transcripción de Babel a ES5 todavía está buscando un módulo. Me estoy encontrando a mí mismo en esa situación, y aunque el fail-safe intuición sería importar el json como var config = require('./config.json'), Mecanografiado-Babel hace indicar que el mismo » no se puede encontrar el módulo .config.json’ mensaje de error.
    • Yo tengo el error «Error al pelusa:: requerir declaración no forma parte de una declaración de importación». Por favor alguien puede ayudar?
  2. 24

    Otra solución es cambiar data.json a data.ts y de exportación como este

    export default {
      "key" : {
        ...
      }
    }

    y de importación como usted esperaría:

    import { default as data } from './data'
    • importación { default como datos } de ‘./de datos.ts’;
    • no que el ‘.ts’ extensión es necesaria.
  3. 20

    Esto puede también realizarse mediante el uso de import declaración de si el uso de webpack v2 que ya viene con json-loader.

    Tenga en cuenta que esto no es async

    import data from './data.json';//Note that this is not async

    También, en su typings.d.ts archivo de añadir el siguiente módulo comodín para evitar la transcripción de error diciendo: Cannot find module

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

    Para cualquier persona interesada en async las importaciones, compruebe este artículo por 2uality

  4. 15

    TS 2.9 añadido soporte para bien escrito json importaciones. Sólo añadir:

    {
      "compilerOptions": {
        "resolveJsonModule": true
      }
    }

    en su tsconfig.json o jsconfig.json. Ahora las importaciones, tales como:

    import json = require('../static/calls.json');

    y

    import * as json from '../static/calls.json';

    debe ser resuelto y se han apropiado de tipificaciones demasiado!

    • No funciona ver este github problema
    • a mí me funciona. La revisión se fusionó maestro el 5 de Julio, ahora disponible en estable.
    • esto solo funciona si tu objetivo es commonjs, si quiere la salida de cualquier otra cosa no va a funcionar
  5. 2

    Como de Manuscrito 2.9 usted puede importar el archivo JSON de forma nativa sin necesidad de hack/cargador necesario.

    El siguiente fragmento es copiado de dicho enlace de arriba.

    …Máquina es capaz de importar archivos JSON como archivos de entrada cuando se utiliza el nodo estrategia para moduleResolution. Esto significa que usted puede usar json archivos como parte de su proyecto, y que va a estar bien escrito!

    ./src/settings.json

    {
        "dry": false,
        "debug": 

    ./src/foo.ts

    import settings from "./settings.json";
    
    settings.debug === true;  //Okay
    settings.dry === 2;       //Error! Can't compare a `boolean` and `number`
  6. -4
    For Angular 6 it can work with simple HTTP get call as below
    
    Service
    //interface, could be Array , object 
    export interface ResultJSON{
    
    }
     //Read JSON file for 3DWide
      getJSON() {
        return this.http.get(this.filepathUrl);
      }
    
    Component :import both service and interface and use as below
    resultJSON :ResultJSON;
     this
          .testService
          .getJSON()
          .subscribe((data: ResultJSON) => {
               this.resultJSON= data;
               console.log(this.resultJSON); 
    
    
             });
    • requiere innecesaria la petición http

Dejar respuesta

Please enter your comment!
Please enter your name here