最近在开发nestjs应用的时候,发现通过import Joi from 'joi'导入joi时报错了,查了一下资料发现需要通过import * Joi from 'joi'来导入。
这是为什么呢?
在TypeScript或ES6模块系统中,import * as Joi from 'joi'这种语法是为了处理模块的导出方式而设计的。具体来说,这里有以下几个原因:
- joi是一个CommonJS模块(Node.js的模块系统),它的导出可能是通过module.exports = joi实现的。
- 在ES6模块中,直接import Joi from 'joi'需要模块有export default,但joi并未使用ES6的默认导出。
- import * as Joi是一种更通用的方式,它会将整个模块的导出(包括所有命名导出和默认导出)作为一个命名空间对象导入。