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

如何将JavaScript的module.exports结构正确改写为TypeScript写法

问题根因

你之前的写法用export default导出了一个包含query、mutation属性的整体对象。ES模块规范中,import { xxx } from 'xxx'语法是读取模块的命名导出成员,不会去解析默认导出对象的内部属性,所以自然拿不到query。
这种默认导出的写法如果要访问内部属性,必须先导入整个默认对象再解构,也就是你说的“需要导入整个模块”的情况:

import moduleObj from './module'
const { query } = moduleObj
正确转换方案

要支持按需直接导入对应成员、无需引入整个模块,聚合索引文件(即你说的index文件)直接使用命名重导出语法即可,这也是ES/TS模块下聚合导出的标准写法:

export { query } from './query'
export { mutation } from './mutation'

该写法不需要先单独引入子模块再导出,代码更简洁,同时天然支持tree-shaking,打包时不会引入未使用的成员。
修改后就可以直接用你期望的方式导入:

// 单独导入query,不会引入mutation相关代码
import { query } from './module'

// 也可以按需同时导入多个成员
import { query, mutation } from './module'

这个写法对原有CommonJS风格的导入也完全兼容,老代码里的const { query } = require('./module')不需要做任何修改就能正常运行。

可选兼容写法

如果有场景需要一次性导入所有成员(比如全局注册),可以在命名导出的基础上额外增加默认导出,两种导入模式可以共存:

import { query } from './query'
import { mutation } from './mutation'

// 命名导出,支持按需引入
export { query, mutation }
// 默认导出全量对象,支持整包导入
export default { query, mutation }

此时两种导入写法都能正常生效:

// 按需引入
import { query } from './module'
// 全量引入
import allModule from './module'

内容的提问来源于stack exchange,提问作者pawellysy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:57:09