You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让TypeScript编译移除仅用于获取类型的JSON导入?

如何让TypeScript移除仅用于类型获取的JSON导入变量

问题场景

我在Node环境的TypeScript后端项目里,有个自动生成的JSON文件。现在用下面的代码导入它,纯粹是为了拿到JSON对象的类型:

import countries from '../generated/countries.json' assert { type: 'json' }
type Countries = typeof countries

运行时根本不需要countries这个JS变量,能不能让TypeScript编译时直接把它删掉?主要是想避开Node关于ESM JSON导入是实验特性的警告。

解决方法

1. 用类型专属导入(TypeScript 3.8及以上支持)

直接把导入改成类型导入,TS只会处理类型信息,编译后不会生成任何运行时的导入代码:

import type countries from '../generated/countries.json'
type Countries = typeof countries

这种方式连assert { type: 'json' }都不用加——因为类型导入本来就不会触发运行时的JSON加载,自然也不会触发Node的实验特性警告。

2. 手动声明JSON模块类型(彻底避开导入)

如果不想写导入语句,还可以手动声明JSON文件的类型,直接引用类型就行:

  • 先在项目里建个类型声明文件,比如types/json.d.ts,内容如下:
declare module '*.json' {
  const value: any;
  export default value;
}
  • 然后直接通过import()类型引用拿到JSON的类型,完全不用写实际的导入:
type Countries = typeof import('../generated/countries.json').default

这种方式连编译后的JS里都不会有任何和这个JSON相关的代码,彻底解决警告问题。

验证是否生效

编译完之后去看生成的JS文件,如果里面找不到countries相关的导入语句,就说明已经成功移除了。

内容的提问来源于stack exchange,提问作者v-moe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:58:18