15

I have a json file into src/assets/version.json with this content:

{"VERSION":"1.0.0"}

and I import the file into the *.ts, eg.:

import * as VersionInfo from 'src/assets/version.json';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {

 constructor() {
   console.log(`version ${VersionInfo['VERSION']}`);
 }

}

output

version 1.0.0

This works on Angular 11 but on Angular 12 the CLI show the error

Should not import the named export 'VERSION' (imported as 'VersionInfo') from default-exporting module (only default export is available soon)

this is my tsconfig.base.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "strictPropertyInitialization": false,
    "baseUrl": "./",
    "importHelpers": true,
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "noImplicitAny": false,
    "target": "es2015",
    "resolveJsonModule": true,
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "jszip": [
        "node_modules/jszip/dist/jszip.min.js"
      ]
    }
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictTemplates": true,
    "strictInjectionParameters": true
  },
}

How fix this error?

3 Answers 3

22

Following should be placed in tsconfig.json

{
 ...
 "compilerOptions": {
    ...
    "resolveJsonModule": true, //already there
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true // Add this line
    ...
   },
...
}

and then simply import the following in your component

import VersionInfo from 'src/assets/version.json';
Sign up to request clarification or add additional context in comments.

2 Comments

allowSyntheticDefaultImports should be inside compilerOptions
@atlau is correct about 'allowSyntheticDefaultImports' placement. Also, 'esModuleInterop' is not necessary to add.
7

You can try in the tsconfig.json as:

"compilerOptions": { "allowSyntheticDefaultImports":true }

And import:

import VersionInfo from 'src/assets/version.json';

1 Comment

Of all answers, this is only entirely correct one
7

import { default as VersionInfo } from 'src/assets/version.json';

You need the two tsconfig entries mentioned above too.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.