typescript - importar dinámicamente archivo json
Solía cargar un archivo json así:
import faq from './faq.json'
interface FAQ {
title: string
body: string
}
interface SiteConfig {
title: string
faqs: FAQ[]
}
sites: {[key: string]: SiteConfig} = {
siteA: {
title: 'xx',
faqs: faq
}
}
Ahora quiero usar importaciones dinámicas:
interface FAQ {
title: string
body: string
}
interface SiteConfig {
title: string
faqs: () => FAQ[]
}
sites: {[key: string]: SiteConfig} = {
siteA: {
title: 'xx',
faqs: (): Promise<FAQ[]> => import('./faq.json')
}
}
falla con:
Type 'Promise<typeof "*.json">' is not assignable to type 'Promise<FAQ[]>'.
Respuesta #1
Typescript te da un error porque import devuelve una promesa de tipo JSON, no FAQ[] y por lo tanto tu error.
Intenta en su lugar:
sites: {[key: string]: SiteConfig} = {
siteA: {
title: 'xx',
faqs: (): Promise<any> => import('./faq.json')
}
}
También podrías hacer que faqs sea una función asincrónica
sites: {[key: string]: SiteConfig} = {
siteA: {
title: 'xx',
faqs: async (): Promise<any> => await import('./faq.json')
}
}
