问题重现
当使用ts语法导入第三方库时,比如koa模块,这时会发现出现这个错误。这个错误因为没有默认导出。
问题原因
一般我们使用ts导入其他模块时都会有一个声明文件。不明白可以看我另外一篇 博客,我们进入声明文件中可以发现模块是通过export =
的方式导出的。
于是我们去TS官网中的模块可以发现:当使用export = 和 import = require()时
- CommonJS和AMD的环境里都有一个exports变量,这个变量包含了一个模块的所有导出内容。
- CommonJS和AMD的exports都可以被赋值为一个对象, 这种情况下其作用就类似于 es6 语法里的默认导出,即 export default语法了。虽然作用相似,但是 export default 语法并不能兼容CommonJS和AMD的exports。
- 为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。
- export =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。
- 若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require(“module”)来导入此模块。
可以发现,ts为了兼容CommonJS和AMD的exports。所以这里定义了一种方法来解决这种问题使用export=
的方式导出的模块必须使用import module = require(“module”)
这种方式导入。
这里也可以使用另外一种方式解决这个问题:
import * as koa from ‘koa’
但是这种方式导入和上面是有一些区别的。