Angular/Typescript - Imposible convertir el archivo importado '*.json' debido a la definición del módulo
En mi proyecto de Angular/Typescript2.2, para fines de desarrollo, importo archivos *.json de vez en cuando como datos de prueba en mis componentes. Para permitir la importación de un archivo .json como un módulo, agregué lo siguiente a typings.d.ts
declare module '*.json' {
const value: any;
export default value;
}
Por supuesto, puedo asignar el contenido de estos archivos a un campo con tipo any, pero quiero asignarlos a un campo con el tipo de una de mis interfaces en su lugar. Tenga en cuenta que quiero mantener el valor en la definición del módulo abierto a todos los tipos. No quiero codificarlo de manera fija a 1 interfaz.
import {ProcessMilestone} from '../../../domain';
import * as milestones from './test.json';
export class MilestoneSearchComponent implements OnInit {
data: ProcessMilestone[];
ngOnInit(): void {
this.data = <ProcessMilestone[]> milestones;
}
}
Esto me da el siguiente error:
El tipo 'typeof '*.json'' no se puede convertir al tipo 'ProcessMilestone[]'. La propiedad 'includes' falta en el tipo 'typeof '*.json''.
Está claro que debido a la definición actual del módulo de '*.json', no es posible hacer un casting. ¿Es posible ajustar esto para que sea posible? No tengo idea de las posibilidades.
Solo son viables las soluciones de esfuerzo mínimo. Si no, en su lugar obtendré los datos desde el back-end.
Respuesta #1
¿Lo que estás haciendo funciona en tiempo de ejecución? Si es así, siempre puedes obligar a TypeScript a permitir una aserción de tipo pasando por any:
this.data = <ProcessMilestone[]> <any> milestones;
Eso es el mínimo esfuerzo que puedo imaginar. Por supuesto, si resulta que tu archivo JSON no contiene un objeto del tipo correcto, explotará en tiempo de ejecución sin advertencia de TypeScript, que ha sido obligado al silencio por la aserción de tipo.
