【问题标题】:dynamic import json file动态导入json文件
【发布时间】:2026-01-09 04:55:02
【问题描述】:

我以前是这样加载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[]>'.

【问题讨论】:

    标签: typescript dynamic-import


    【解决方案1】:

    Typescript 给你一个错误,因为 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')
        }
    }
    

    【讨论】: