【问题标题】:Procedure for moving a NodeJS project to TypeScript将 NodeJS 项目移动到 TypeScript 的过程
【发布时间】:2016-11-19 17:55:59
【问题描述】:

似乎仅仅安装它然后将文件扩展名更改为.ts 不足以有效地使用 NodeJS 项目迁移到 TypeScript。我收到大约 400 个错误,这些错误似乎主要源于模块解析问题(但不仅如此)。

有几个指南涵盖了这个主题,但它们似乎没有帮助,可能是因为它们最多只有一岁。因此,我想请教一下最近的建议。

我需要采取哪些步骤将 NodeJS 项目转换为 Typescript?

【问题讨论】:

    标签: javascript node.js typescript


    【解决方案1】:

    1.在 package.json 中为你的 devDependencies 添加类型

    {
      "devDependencies": {
        "typings": "latest"
      },
      "scripts": {
        "postinstall": "typings install --save"
      }
    }
    

    2.添加 typings.json(与您的 package.json 一起),注意上面 package.json 中的 postinstall 操作 - 这将在每个 npm install 上安装 typescript 定义

    {
      "globalDependencies": {
        "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts"
      }
    }
    

    3.添加tsconfig.json

    { 
         "compilerOptions": { 
             "emitDecoratorMetadata": true, 
             "experimentalDecorators": true,
             "moduleResolution": "node",
             "module": "commonjs", 
             "target": "es6",
             "sourceMap": true,
             "outDir": "dist",
             "declaration": true,
             "allowJs": true,
             "forceConsistentCasingInFileNames": true
         },
         "exclude": [
             "node_modules",
             "dist",
             ".vscode",
             "docs"
         ]
    } 
    

    请注意,`allowJs' 选项将帮助您在必要时保持一些 javascript 文件未转换。

    1. 将 ts 文件的转译作为构建过程的一部分

    这应该会让你继续前进。之后逐步将 javascript 转换为 typescript 以利用其优势。

    希望这会有所帮助。

    【讨论】:

    • 感谢您提供这些详细的步骤,很难知道该选择哪些配置选项。但是,我确实尝试将 allowJs 设置为 true 以增量方式进行(并添加一个构建目录,输出应该去的地方),但是,ts 编译器抱怨它无法编译,因为它会覆盖构建目录中的文件。但是我确实将构建目录添加到排除项中,就像 node_modules 一样,所以我不知道该怎么做,只是将所有文件都更改为 .ts。我错过了什么吗?
    • 你没有忘记在tsconfig中指定outDir?这也可能与您的构建设置方式有关,您是使用 gulp/grunt 还是直接通过 tsc 编译。我已经使用了两者,并且两者都可以与 allowJs 选项一起正常工作。我建议您尝试将您的项目减少到最低限度,以便清楚地看到问题将在哪里消失。
    • 我今天早上确实让它工作了,通过指定 both “exclude”(构建,node_modules)和“include”(src,我移动了我的代码文件) (是的,outDir="build")。这让我很惊讶,但是没有它(即只有“排除”或“包含”我得到了这些错误,并且 tsc 正在以一种非常奇怪的方式在 build 中设置文件结构。
    • 另外,使用您的具体tsconfig.json 我收到错误TS5053: Option 'allowJs' cannot be specified with option 'declaration'.
    • 很奇怪,我确实将这两个选项一起使用,没有任何问题。尽管您是正确的并且存在未解决的问题:github.com/Microsoft/TypeScript/issues/7546。不过感谢您提供的信息。
    【解决方案2】:

    将 Js 迁移到 TS

    您创建一个 tsconfig.json 并将 allowJs 设置为 true。这允许您按原样使用.js!。接下来,您开始将文件扩展名从.ts 更改为.js,同时声明您发现丢失的内容。

    大约一周前我做了一个关于这个的视频https://www.youtube.com/watch?v=gmKXXI_ck7w

    更多:

    也许是因为他们最多只有一岁。

    我会保持最新状态:https://basarat.gitbooks.io/typescript/content/docs/types/migrating.html

    当然,如果您将其作为一本书阅读,我假设您已经看过 nodejs 快速入门:https://basarat.gitbooks.io/typescript/content/docs/quick/nodejs.html

    【讨论】:

    • 感谢您维护该指南。我确实尝试将 allowJs 设置为 true 以增量方式进行(并在输出应该去的地方添加一个构建目录),但随后 ts 编译器抱怨它无法编译,因为它会覆盖构建目录中的文件。但是我确实将构建目录添加到排除项中,就像node_modules 一样,所以我不知道该怎么做,只是将所有文件都更改为.ts。我错过了什么吗?
    • 请同时使用outDir。这也显示在视频中:)
    • 当时我确实使用了它,但我最近通过添加“include”和“exclude”(并且 outDir 仍然存在)使其工作。奇怪的是我不得不同时使用两者,但是哦,好吧
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 2012-01-28
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2019-12-11
      • 2023-03-10
      相关资源
      最近更新 更多