typescript - dynamisk import av JSON-fil


Jeg pleide å laste en json-fil slik:

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

Nå vil jeg bruke dynamiske importeringer:

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

mislykkes med:

Type 'Promise<typeof "*.json">' is not assignable to type 'Promise<FAQ[]>'.

Svar #1

Typescript gir deg en feil fordi import returnerer et løfte av typen JSON, ikke FAQ[], og derfor får du feilen din.

Prøv i stedet:

sites: {[key: string]: SiteConfig} = {
    siteA: {
        title: 'xx',
        faqs: (): Promise<any> => import('./faq.json')
    }
}

Du kan også gjøre faqs til en asynkron funksjon

sites: {[key: string]: SiteConfig} = {
    siteA: {
        title: 'xx',
        faqs: async (): Promise<any> => await import('./faq.json')
    }
}

Relaterte artikler