我可以在 Nodejs 项目中同时使用 ES5 和 Typescript 吗?

Posted

技术标签:

【中文标题】我可以在 Nodejs 项目中同时使用 ES5 和 Typescript 吗?【英文标题】:Can i use ES5 and Typescript at the same time in Nodejs project? 【发布时间】:2019-04-27 05:42:52 【问题描述】:

我用 es5 表示法开发 express 应用程序,现在我需要使用接口。当我搜索它时得知 ES5 中没有接口结构,我决定用 Typescript 编写这部分。但是我不能 require() 这个 ts 文件在另一个用 ES5 符号编写的文件中。我偶尔会搜索这个问题,但我找不到任何谈论这个问题的来源。很可能我走错了路,但我不知道如何做到这一点。有没有办法同时运行 typescript 和 es5。如何实现这个问题?

感谢您的帮助!

更新

仅使用 typescript 编写的模块文件夹。

我的文件结构的一部分在这里:

/managers
/modules
/routes
app.js
package.json
tsconfig.json

这里是 tsconfig.json 文件内容:


    "compileOnSave": false,
    "compilerOptions": 
      "baseUrl": "./modules",
      "outDir": "./dist/out-tsc",
      "sourceMap": true,
      "target": "es5",
      "module": "commonjs",
      "allowJs": true
    
  

package.json 文件是

"scripts": 
    "start": "nodemon --legacy-watch ./bin/www"
  ,
  "dependencies": 
    "async": "^2.6.1",
    "concurrently": "^4.1.0",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.16.0",
    "http-errors": "~1.6.2",
    "jade": "~1.11.0",
    "jsonwebtoken": "^8.3.0",
    "mongoose": "^5.2.12",
    "morgan": "~1.9.0",
    "nodemon": "^1.18.4",
    "typescript": "^1.8.10",
  

【问题讨论】:

“现在我需要使用接口” 为什么?如果您还没有使用 TypeScript,那么接口的整个概念(作为代码构造而不是约定+文档)是不相关的。但是,是的,您当然可以在同一个项目中使用 javascript 和 TypeScript。当然,你不能在 JavaScript 代码中使用特定于 TypeScript 的东西(如接口)。 感谢您的快速回复@T.J.Crowder。实际上我尝试在项目中应用一些模式(这就是我尝试使用接口的原因),我想做的是在 typescript 类中调用一种方法。 【参考方案1】:

您的问题很笼统,缺乏具体的例子。但是,完全可以在同一个项目中混合使用 ES 和 TS。也就是说,您需要了解如何构建代码。

如果没有看到您的项目结构和构建管道,就不可能说出如何解决您的问题,但我建议您通过tsc 运行所有代码,并在tsconfig.json 中使用"allowJs": true

【讨论】:

很遗憾,我仍然无法理解您的应用程序是如何运行的。您的 npm 'start' 脚本调用 nodemon 并监视您未显示其内容的文件夹。此外,还不清楚您何时调用tsc 来转译您的源代码。更令人困惑的是,您的 tsconfig.json 建议您构建的 js 文件输出到完全不相关的地方(dist/out-tsc)。 bin 文件夹包括 www 文件,其中包含应用程序配置。它在根上。我的困惑是 nodemon run ./bin/www 文件夹以及如何实现 tsc 来运行另一个目录。我的最后一个问题是 tsconfig 应该是这样的 "outDir": "./" 还是 "outDir": "./bin/www" ,

以上是关于我可以在 Nodejs 项目中同时使用 ES5 和 Typescript 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Babel将ES6转码为ES5

我可以在一个应用程序中使用 symfony nodeJS 和 angular [关闭]

将 Typescript 编译为 NodeJs:es6 类型问题

一个用户的变化可以使用nodejs同时反映给其他用户

是否可以在javascript项目中使用Nodejs

工作中如何使用GULP构建项目?