动态导入json文件

时间:2018-01-21 17:47:44

标签: typescript dynamic-import

我曾经像这样加载一个json文件:

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

现在我想使用动态导入:

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

失败了:

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

1 个答案:

答案 0 :(得分:0)

打字稿给您一个错误,因为import返回的是类型JSON的诺言,而不是FAQ[],因此是您的错误。

请尝试:

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

您还可以使faqs为异步函数

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