webpack - Încarcă fișierul json în Typescript ca un obiect în loc de un modul
Am următoarea importare într-un cod pe care îl folosesc:
import * as schema from "../schema.json";
În acest moment, variabila schema este un modul și dacă vreau să accesez obiectul meu JSON, trebuie să fac schema.default. Dacă schimb import * as schema în import schema, atunci variabila schema este conținutul JSON (un obiect).
Mă întrebam dacă ar fi posibil să folosești webpack sau vreun plugin babel pentru a încărca un obiect cu import * as schema ?
Fișierul curent de configurare Babel:
presets: ['@babel/preset-typescript', '@babel/preset-react', ['@babel/preset-env', { modules: 'commonjs' }]],
plugins: [
'babel-plugin-dynamic-import-node',
'@babel/plugin-transform-destructuring',
['@babel/plugin-transform-for-of', { loose: true }],
'@babel/plugin-transform-regenerator',
'@babel/plugin-transform-runtime',
// ["@babel/plugin-transform-typescript", {allowNamespaces: true}],
['@babel/plugin-proposal-decorators', { legacy: true }],
['@babel/plugin-proposal-class-properties', { loose: true }],
'@babel/plugin-proposal-object-rest-spread',
['styled-components', { ssr: true }]
]
Răspuns #1
Am creat un typings.d.ts în folderul /src/ cu următorul cod:
}
declare module "*.json" {
const value: any
export default value
}
Și în componenta mea:
import data from "./data.json"
export default function MyComponent() {
return (
<div>
{data.map(elem => (
<h1> {elem.title}</h1>
<p> {elem.body}</p>
)}
</div>
)}
Repornește serverul și a funcționat
