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

TypeScript ES模块环境下如何正确使用.default导入?

解决ES模块下导入bip32/ecpair无法获取工厂函数的问题

以下是几种无需切换到CommonJS的解决思路:

1. 显式访问.default并适配TypeScript类型

由于这两个包本质是CommonJS导出,ES模块导入时会被包裹成带default属性的对象。TypeScript报错是因为类型定义未同步适配,可通过类型断言绕过:

import * as BIP32Factory from 'bip32';
import * as ECPairFactory from 'ecpair';

// 用类型断言告诉TS这是一个含default的对象
const bip32 = (BIP32Factory as { default: typeof BIP32Factory }).default;
const ecPair = (ECPairFactory as { default: typeof ECPairFactory }).default;

console.log(typeof bip32); // 输出"function"
bip32(ecc); // 正常调用

如果觉得any太宽泛,也可以手动定义工厂函数的类型来替换断言。

2. 在ES模块中直接使用require

Node.js的ES模块环境原生支持require,直接用CommonJS风格导入就能拿到预期的函数:

const BIP32Factory = require('bip32');
const ECPairFactory = require('ecpair');

console.log(typeof BIP32Factory); // 输出"function"

这种写法无需额外配置,打包工具(如webpack、Vite)也能正常处理。

3. 更新或修复类型定义

问题大概率出在@types/bip32和@types/ecpair的类型定义未适配ES模块导入。先尝试更新类型包:

npm install @types/bip32@latest @types/ecpair@latest --save-dev

如果更新后仍无效,可以手动修改node_modules/@types/bip32/index.d.ts,在模块声明末尾添加export default BIP32;,让TypeScript识别默认导出。

4. 用打包工具自动转换

如果项目使用webpack、Rollup等工具,配置对应的CommonJS转换插件(比如Rollup的@rollup/plugin-commonjs),工具会自动将CommonJS导出转换为ES模块兼容的默认导出,这样就能直接用import BIP32Factory from 'bip32'的写法调用函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:07:02