NodeJS+TypeScript严格模式下ES6模块如何导入JSON文件
Node.js + TypeScript ES模块严格模式下导入JSON的解决方案
方法1:使用fs/promises读取解析JSON(最稳妥,无语法兼容问题)
这种方式完全规避了ES模块导入JSON的语法兼容问题,且严格模式下完全可用。
示例代码:
// script.ts import { readFile } from 'fs/promises'; async function loadData() { const rawData = await readFile('./data.json', 'utf8'); const data = JSON.parse(rawData); // 此处可使用data执行CRUD操作 console.log(data); } loadData();
编译后运行无需额外实验性标志,严格模式下无报错。
方法2:配置TypeScript直接导入JSON(需对应Node.js版本支持)
通过调整tsconfig.json配置,让TypeScript允许直接导入JSON文件,同时适配Node.js运行环境:
- 修改
tsconfig.json,添加如下配置:
{ "compilerOptions": { "module": "ESNext", "resolveJsonModule": true, "esModuleInterop": true, "strict": true // 保持严格模式开启 }, "include": ["**/*.ts", "**/*.json"] }
- 在TypeScript文件中直接导入JSON:
// script.ts import data from './data.json'; // 使用data执行操作 console.log(data);
注意:Node.js 17及以上版本支持直接导入JSON(无需实验性标志);若使用更低版本,运行时需添加
--experimental-json-modules标志,例如:node --experimental-json-modules dist/script.js
方法3:手动创建类型声明文件配合导入
若不想修改tsconfig.json的resolveJsonModule配置,可手动定义JSON文件的类型声明:
- 在
data.json同目录下创建data.json.d.ts文件:
declare module './data.json' { type Data = { // 按实际JSON结构定义类型 id: number; name: string; // 其他字段... }; const data: Data; export default data; }
- 之后可结合方法1的
fs/promises读取方式使用,或直接导入(TypeScript会自动识别类型)。
内容的提问来源于stack exchange,提问作者codingForCode
相关产品推荐
相关产品推荐

