Angular / Typescript - 由于模块定义

时间:2017-09-04 12:34:10

标签: angular typescript casting

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

declare module '*.json' {
  const value: any;
  export default value;
}

当然,我可以将这些文件的内容分配给类型为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;
  }
}

这给了我以下错误:

  

类型'typeof'* .json''无法转换为类型   'ProcessMilestone []&GT;'。类型'typeof中缺少属性'includes'   '*上传.json'”。

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

只有尽职调查解决方案才有可行。如果没有,我将改为从后端获取数据。

1 个答案:

答案 0 :(得分:8)

你在运行时做什么工作?如果是这样,您始终可以通过any

强制TypeScript允许类型断言
this.data = <ProcessMilestone[]> <any> milestones;

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