React+TypeScript项目中如何动态导入moment.js并解决调用报错问题
Moment动态导入报错解决方案
错误根因
你在获取默认导出时额外多执行了一次调用:(await import('moment')).default()末尾的括号是多余的,import('moment')返回的模块对象中,default属性本身就是Moment构造函数,直接执行default()会得到一个Moment实例,实例无法作为函数再次被调用,因此抛出Type Moment has no call signatures报错。
你的猜测修改方向是错误的,原有后续调用moment(currentNb).valueOf()的逻辑不需要改动,只需要修正导入语句即可。
正确写法
const myFn = async (currentNb) => { // 去掉default后的括号,直接取构造函数 const moment = (await import('moment')).default const dateUnix: number = moment(currentNb).valueOf() // 其余原有逻辑保持不变 }
TypeScript环境补充
如果是TS项目,为了保证类型提示正确,可以在文件顶部添加类型导入:
import type moment from 'moment'
也可以直接给动态导入的变量增加类型标注:
const moment: typeof import('moment').default = (await import('moment')).default
内容的提问来源于stack exchange,提问作者Manzana
相关产品推荐
相关产品推荐

