在使用TypeScript导入一般的第三方模块时,因为兼容了es6、es7的语法,所以一般在typescirpt中可以使用 import、export 的方式来导入导出模块ts模块。但是使用ts写nodejs的代码时,这样就有问题,因为nodejs采用的是commonjs,所以这样两者就有冲突
使用commonjs的方式导入第三方模块:
const koa = require(‘koa’)
这种方式虽然没报错,但是这个里面还是有问题的。
使用es6的方式导入:
import {koa} from ‘koa’
这种方式会报错:koa’ is declared but its value is never read
解决方案
ts是用来用来做类型检测的,使用ts来开发nodejs其实只是使用了其中的语法特点,来完成编写,并且最终也要编译成其他语法结构的代码。
tsconfig.json :
可以看出这里还是会编译成commonjs的代码。
- 导入ts模块要进行类型检测,但是使用import导入模块时要进行类型检测,因为一般像koa的模块没有ts文件,使用的commonjs导出的js模块,所以没法用ts进行类型检测,所以要使用声明文件来处理这个问题,网址
- 一般声明文件只是项目开发时,编译器参照使用的,所以安装时,安装到开发依赖中
-
npm i @types/koa -D
- 默认所有可见的"@types"包会在编译过程中被包含进来。 node_modules/@types文件夹下以及它们子文件夹下的所有包都是可见的; 也就是说, ./node_modules/@types/,…/node_modules/@types/和…/…/node_modules/@types/等等
- 所以需要早tsconfig.json中配置,如果指定了typeRoots,只有typeRoots下面的包才会被包含进来
- 注意:若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require(“module”)来导入此模块。
tsconfig.json 配置
这里也可以包含自己的写的声明文件如@types
最终效果
|
请发表评论