2017-09-04 86 views
2

在我的Angular/Typescript2.2項目中,爲了開發目的,我不時導入*.json文件作爲測試數據在我的組件中。 要允許導入.json文件作爲一個模塊,我增加了以下內容typings.d.tsAngular/Typescript - 由於模塊定義導致導入'* .json'文件不可能

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; 
    } 
} 

這給了我以下錯誤:

Type 'typeof '*.json'' cannot be converted to type 'ProcessMilestone[]>'. Property 'includes' is missing in type 'typeof '*.json''.

這比疏通因「*以.json」當前模塊定義,鑄造是不可能的。是否有可能調整這個,這樣纔有可能?我不知道可能性。

只有最小努力解決方案是可行的。如果不是,我將從後端獲取數據。

回答

3

無論你在運行時做什麼工作嗎?如果是這樣,你可以隨時強制打字稿穿過any允許類型斷言:

this.data = <ProcessMilestone[]> <any> milestones; 

這是我能想到的是最小的努力。當然,如果事實證明你的JSON文件不包含正確類型的對象,它將在運行時炸燬,TypeScript沒有任何警告,TypeScript已經被類型斷言強制置於無聲狀態。

+0

工程就像一個魅力,確實很小!從來沒有嘗試過雙重類型斷言。謝謝! –