如何在TypeScript中为带type选项的JSON导入指定类型?
解决TypeScript识别JSON导入类型的问题
你用的是TypeScript 5.0+的JSON模块断言导入语法(with { type: 'json' }),这种情况下单独创建icons.d.ts或icons.json.d.ts的常规方法不生效,得用TS的模块声明来处理,具体操作如下:
创建全局JSON模块声明文件
在项目根目录或src文件夹下新建一个.d.ts文件(比如命名为json-types.d.ts),写入以下代码:declare module '*.json' { // 根据你的icons.json实际结构定义类型,通用键值对用Record<string, string>,结构固定则写精确类型 const value: Record<string, string>; export default value; }举个例子,如果你的
icons.json结构是:{ "home": "/icons/home.svg", "settings": "/icons/settings.svg" }可以把类型写得更精准:
declare module '*.json' { const value: { home: string; settings: string; }; export default value; }确保TS能扫描到声明文件
打开tsconfig.json,检查include数组包含了该.d.ts文件的路径。如果文件在根目录,就添加"json-types.d.ts";如果在src文件夹下,"src/**/*"已经能覆盖到:{ "include": ["src/**/*", "json-types.d.ts"] }清理无效的旧声明文件
删除之前创建的/icons.d.ts和/icons.json.d.ts,避免和全局JSON模块声明冲突。
如果嫌全局声明麻烦,也可以直接在导入时用类型断言(虽然不如前者优雅):
import icons from '/icons.json' with { type: 'json' } as unknown as { home: string; settings: string; };
内容的提问来源于stack exchange,提问作者user26868532
相关产品推荐
相关产品推荐

