Búsqueda de sitios web

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')
    }
}

Artículos relacionados