由于我计划将一个非常大的Node.js Express Mongodb项目转换为使用打字稿而不是我当前的JS + Babel设置,所以最近我对打字稿的了解很多。
问题是,我阅读过打字稿是向后兼容的,这意味着如果我将其作为打字稿代码运行,则我当前的JS代码应该能够运行。我的困惑从这里开始,因为只是为了尝试打字稿,我已将server.js
重命名为server.ts
,一切似乎都坏了。。
我当前收到此错误:
import mongoose from 'mongoose';
^^^^^^^^
SyntaxError: Unexpected identifier
我已经安装了@types/mongoose
软件包,并且拥有以下tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"removeComments": true,
"sourceMap": true,
"target": "es5",
"outDir": "build",
"strict": true,
"allowSyntheticDefaultImports": true
},
"include": [
"src/back/**/*.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
只是为了使代码正常工作,我试图注释掉猫鼬的一部分,但是当我这样做时,它会抱怨另一个导入(瞬间),并且一直持续到我基本上没有代码为止。
我正在使用以下版本:
Node.js 10.16.0
Typescript 3.7.3
ts-node-dev 1.0.0-pre.44
这是我package.json
内部的命令,用于运行开发服务器。
ts-node-dev --respawn --transpileOnly ./src/back/server.ts
我已经在SO和其他网站上查看了许多其他问题,这些问题与我的问题类似,但是我尝试的解决方案对我不起作用。
答案 0 :(得分:1)
那是因为import
不是本机node.js的一部分,所以只有通过babel或类似工具进行转译时,它才有效。这就是为什么它不是“向后兼容”的原因。
但是打字稿也支持import
,这是我们在tsconfig中用于某些打字稿项目的内容,也许moduleResolution
可以解决问题
{
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
}
},
"include": [
"src/**/*"
]
}