TypeScript自动添加.default


问题

在TypeScript中默认引用了没有export default的npm模块(使用了commonJS规范的第三方库,使用export = 导出,详见文档

1
import moment from 'moment';

并照如下方式使用

1
2
const now = moment();
const targetDate = moment(time);

转换的js语法为如下

1
2
var now = moment_1.default();
var targetDate = moment_1.default(time);

由于全局变量 moment 中不存在 default 属性,报错

原因

1
import moment from 'moment';

此行代码意味着从模块中导入默认导出并将其绑定到本地名称
TypeScript按要求执行,并访问模块对象的默认属性
但使用commonJs导出的包不存在default属性,因此报错

解决方法

针对使用commonJs导出的包,使用如下方式导入

1
2
3
import * as moment from 'moment';
// 推荐方法
import moment = require('moment');

参考