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