tipos tipografia tipo para letras letra fuentes font family javascript json node.js typescript commonjs

javascript - para - tipografia html



Error del compilador de mecanografía al importar el archivo json (6)

A partir de Typescript 2.9 puede importar archivos JSON de forma nativa sin necesidad de ningún hack / loader adicional.

El siguiente extracto se copia de dicho enlace anterior.

... TypeScript ahora puede importar archivos JSON como archivos de entrada al usar la estrategia de nodo para moduleResolution. Esto significa que puede usar archivos json como parte de su proyecto, ¡y estarán bien escritos!

./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`

Entonces el código es simple:

llamadas.json

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

file.ts

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

el javascript generado es correcto y cuando ejecuta el servidor del nodo js, ​​el registro de consola json.SERVER imprime ''{peticiones: {uno:'' 1 ''}}'', como debería.

Sin embargo, el compilador de mecanografiado (commonjs), de alguna manera no le gusta especialmente esta situación y arroja: "No se puede encontrar el módulo ''../static/calls.json''".

Por supuesto, intenté escribir un archivo .d.ts, como este:

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

esto obviamente arroja: "La declaración del módulo ambiental no puede especificar el nombre relativo del módulo".

También probé diferentes variantes, como:

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

y luego requiere:

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

Ninguno funciona correctamente y tiene sus propios pequeños errores de compilación :)

Quiero usar un archivo externo .json porque uso el lado del servidor commonjs y el lado del cliente amd y quiero un solo archivo para cargar constantes.


Esto también se puede hacer mediante la declaración de import si se usa webpack v2 que ya está empaquetado con json-loader .

Tenga en cuenta que esto no es asíncrono

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

Además, en su archivo typings.d.ts agregue el siguiente módulo comodín para evitar el error de mecanografía que dice: Cannot find module

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

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


Otra solución es cambiar data.json a data.ts y exportar así

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

e importa como esperarías:

import { default as data } from ''./data''


TS 2.9 agregó soporte para importaciones json bien escritas . Solo agrega:

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

en su tsconfig.json o jsconfig.json . Ahora importaciones como:

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

y

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

¡Debería resolverse y tener los tipos adecuados también!


Use var lugar de import .

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

Estás cargando un archivo JSON, no un módulo, por lo que la import no debe usarse en este caso. Cuando se usa var , require() se trata nuevamente como una función normal.

Si está utilizando una definición de Node.js, todo debería funcionar, de lo contrario será necesario definir require .


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); });