Angular/Typescript - Kast importert '*.json'-fil umulig på grunn av moduldefinisjon
I mitt Angular/Typescript2.2-prosjekt importerer jeg *.json-filer fra tid til annen som testdata i komponentene mine for utviklingsformål. For å tillate importering av en .json-fil som et modul, la jeg til følgende i typings.d.ts
declare module '*.json' {
const value: any;
export default value;
}
Selvfølgelig kan jeg tilordne innholdet i disse filene til et felt med typen any, men jeg vil tilordne dem til et felt med typen av en av mine grensesnitt i stedet. Merk at jeg ønsker å holde verdien i moduldefinisjonen åpen for alle typer. Jeg vil ikke hardkode det til 1 grensesnitt.
import {ProcessMilestone} from '../../../domain';
import * as milestones from './test.json';
export class MilestoneSearchComponent implements OnInit {
data: ProcessMilestone[];
ngOnInit(): void {
this.data = <ProcessMilestone[]> milestones;
}
}
Dette gir meg følgende feil:
Type ''typeof '*.json''' kan ikke konverteres til type ''ProcessMilestone[]''. Egenskapen ''includes'' mangler i typen ''typeof '*.json'''.
Det er klart at på grunn av den nåværende modundefinisjonen av '*.json', er ikke casting mulig. Er det mulig å justere dette slik at det blir mulig? Jeg har ingen anelse om mulighetene.
Kun løsninger med minimalt innsatsnivå er levedyktige. Hvis ikke, vil jeg i stedet hente dataene fra backend.
Svar #1
Fungerer det du gjør under kjøring? Hvis ja, kan du alltid tvinge TypeScript til å tillate en typepåstand ved å gå gjennom any:
this.data = <ProcessMilestone[]> <any> milestones;
Det er så minimal innsats som jeg kan komme på. Selvfølgelig, hvis det viser seg at JSON-filen din ikke inneholder et objekt av riktig type, vil det krasje under kjøring uten advarsel fra TypeScript, som har blitt tvunget til stillhet av typepåstanden.
