Angular 12 将 json 导入 ts

ar0*_*968 9 typescript angular angular12

我有一个src/assets/version.json包含此内容的 json 文件:

{"VERSION":"1.0.0"}
Run Code Online (Sandbox Code Playgroud)

然后我将文件导入到*.ts,例如:

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']}`);
 }

}
Run Code Online (Sandbox Code Playgroud)

输出

version 1.0.0
Run Code Online (Sandbox Code Playgroud)

这适用于 Angular 11,但在 Angular 12 上,CLI 显示错误

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

这是我的 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
  },
}
Run Code Online (Sandbox Code Playgroud)

如何修复这个错误?

Sal*_*med 8

以下应该放在 tsconfig.json

{
 ...
 "compilerOptions": {
    ...
    "resolveJsonModule": true, //already there
    "esModuleInterop": true,
    ...
   },
...
"allowSyntheticDefaultImports": true
}
Run Code Online (Sandbox Code Playgroud)

然后只需在您的组件中导入以下内容

import VersionInfo from 'src/assets/version.json';
Run Code Online (Sandbox Code Playgroud)

  • allowedSyntheticDefaultImports 应该位于 compilerOptions 内 (9认同)

小智 7

您可以尝试在tsconfig.json以下位置:

"compilerOptions": { "allowSyntheticDefaultImports":true }
Run Code Online (Sandbox Code Playgroud)

并导入:

import VersionInfo from 'src/assets/version.json';
Run Code Online (Sandbox Code Playgroud)


Ada*_*nce 7

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

您还需要上面提到的两个 tsconfig 条目。