在 Angular 7 个项目中导入 JSON
Import JSON in Angular 7 project
在我的 Angular 项目中,我正在为我自己的小型本地化服务导入 JSON 文件。我正在使用 the method suggested here,将我的 typings.d.ts
更新为
declare module "*.json" {
const value: any;
export default value;
}
这对 Angular 6 工作正常,但在更新到 Angular 7 之后,当我尝试访问 属性.
时,我的导入似乎未定义
import * as de from './strings/de.json';
import * as en from './strings/en.json';
var s = en["mykey"]
JSON有一个非常简单的键=>值结构:
{
"myKey": "My Headline",
…
}
6.1 和 7 之间发生了什么变化可能会导致这种行为?
结果是 Angular 7 和 TypeScript 3.1 there actually have been some changes(我猜他们从 TS 2.9+ 开始就有了?)。使用问题中的代码,所有值都包含在 'default' 对象中。为了防止这种情况,我不得不简化导入语句:
import de from './strings/de.json';
import en from './strings/en.json';
关于如何在 TypeScript 中导入 JSON 文件。
经过大量挖掘、跟踪和错误,我终于让我的应用程序在 Angular 7:
中正确导入 JSON
首先,删除
"resolveJsonModule": true
"esModuleInterop": true
来自 tsconfig.json,如果你有其他非 Angular 7 个具体答案。
创建src/typings.d.ts:
declare module "*.json" {
const value: any;
export default value;
}
更新 tsconfig.json 中的 typeRoots
以使用 src/typings.d.ts ,例如:
"typeRoots": [
"node_modules/@types",
"src/typings.d.ts"
],
导入JSON:
import data from './data.json';
console.log(data);
在 Angular 7 中,我必须执行以下步骤:
(1) 进口
import pkg from '../../package.json'
(2) tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"resolveJsonModule": true,
AND more compiler options here
}
}
(3) angular.json(停止 JSON 导入时的 ng lint 中断)
此处唯一的变化是添加... "**/*.json"
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**",
"**/*.json"
]
}
}
我一直在寻找无需修改 angular.json 文件即可工作的解决方案
我通过将 JSON 导出为 .ts 常量解决了这个问题:
export const TEST_DATA = {...};
然后导入我的组件
在我的 Angular 项目中,我正在为我自己的小型本地化服务导入 JSON 文件。我正在使用 the method suggested here,将我的 typings.d.ts
更新为
declare module "*.json" {
const value: any;
export default value;
}
这对 Angular 6 工作正常,但在更新到 Angular 7 之后,当我尝试访问 属性.
时,我的导入似乎未定义import * as de from './strings/de.json';
import * as en from './strings/en.json';
var s = en["mykey"]
JSON有一个非常简单的键=>值结构:
{
"myKey": "My Headline",
…
}
6.1 和 7 之间发生了什么变化可能会导致这种行为?
结果是 Angular 7 和 TypeScript 3.1 there actually have been some changes(我猜他们从 TS 2.9+ 开始就有了?)。使用问题中的代码,所有值都包含在 'default' 对象中。为了防止这种情况,我不得不简化导入语句:
import de from './strings/de.json';
import en from './strings/en.json';
经过大量挖掘、跟踪和错误,我终于让我的应用程序在 Angular 7:
中正确导入 JSON首先,删除
"resolveJsonModule": true "esModuleInterop": true
来自 tsconfig.json,如果你有其他非 Angular 7 个具体答案。
创建src/typings.d.ts:
declare module "*.json" { const value: any; export default value; }
更新 tsconfig.json 中的
typeRoots
以使用 src/typings.d.ts ,例如:"typeRoots": [ "node_modules/@types", "src/typings.d.ts" ],
导入JSON:
import data from './data.json'; console.log(data);
在 Angular 7 中,我必须执行以下步骤:
(1) 进口
import pkg from '../../package.json'
(2) tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"resolveJsonModule": true,
AND more compiler options here
}
}
(3) angular.json(停止 JSON 导入时的 ng lint 中断)
此处唯一的变化是添加... "**/*.json"
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**",
"**/*.json"
]
}
}
我一直在寻找无需修改 angular.json 文件即可工作的解决方案
我通过将 JSON 导出为 .ts 常量解决了这个问题:
export const TEST_DATA = {...};
然后导入我的组件