打字稿真的向后兼容吗?

时间:2019-12-09 14:59:23

标签: javascript node.js typescript

由于我计划将一个非常大的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和其他网站上查看了许多其他问题,这些问题与我的问题类似,但是我尝试的解决方案对我不起作用。

1 个答案:

答案 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/**/*"
  ]
}