Angular/Typescript - 由于模块定义,无法转换导入的'*.json'文件

Nic*_*lle 4 casting typescript angular

在我的Angular/Typescript2.2项目中,出于开发目的,我*.json不时地将文件作为组件中的测试数据导入.为了允许将.json文件作为模块导入,我添加了以下内容typings.d.ts

declare module '*.json' {
  const value: any;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以将这些文件的内容分配给具有类型的字段any,但我想将它们分配给类型为我的一个接口的字段.请注意,我希望模块定义中的值对所有类型保持开放.我不想硬编码到1接口.

import {ProcessMilestone} from '../../../domain';
import * as milestones from './test.json';

export class MilestoneSearchComponent implements OnInit {
  data: ProcessMilestone[];

  ngOnInit(): void {
      this.data = <ProcessMilestone[]> milestones;
  }
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

类型'typeof'*.json''无法转换为'ProcessMilestone []>'类型.类型'typeof'*.json''中缺少属性'includes'.

很明显,由于'*.json'的当前模块定义,无法进行转换.有可能调整这个以便这可能吗?我不知道可能性.

只有极少工作的解决方案是可行的.如果没有,我将改为从后端获取数据.

jca*_*alz 11

无论你在运行时做什么工作?如果是这样,您始终可以通过any以下方式强制TypeScript允许类型断言:

this.data = <ProcessMilestone[]> <any> milestones;
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最小努力.当然,如果事实证明你的JSON文件不包含正确类型的对象,它将在运行时爆炸而没有来自TypeScript的警告,TypeScript已被类型断言强制进入静默状态.