如何使用 ts-node 运行 TypeScript 脚本

介绍

TypeScript 越来越受欢迎。由于 TypeScript 是 JavaScript 的超集,因此使用它意味着在 V8 引擎能够理解它们之前将您的 TypeScript 文件编译为纯 JavaScript。您可以监视文件更改并自动编译。但有时,您只想运行脚本并获得结果。这就是ts-node切入点。使用ts-node,您可以跳过大惊小怪并轻松执行您的 TypeScript 脚本。

先决条件

要成功完成本教程,您需要具备以下条件:

第 1 步 – 入门

要开始工作,您需要安装typescriptts-node

  • npm install typescript ts-node

既然ts-node是你可以运行一个可执行文件,没有什么对importrequire在您的脚本。

如果您还没有可以使用的 TypeScript 项目,则可以直接使用此脚本进行测试ts-node

脚本:reptile.ts
class Reptile {
  private reptiles: Array<string> = [
    'Alligator',
    'Crocodile',
    'Chameleon',
    'Komodo Dragon',
    'Iguana',
    'Salamander',
    'Snake',
    'Lizard',
    'Python',
    'Tortoise',
    'Turtle',
  ];

  shuffle(): void {
    for (let i = this.reptiles.length - 1; i > 0; i--) {
      let j: number = Math.floor(Math.random() * (i + 1));
      let temp: string = this.reptiles[i];
      this.reptiles[i] = this.reptiles[j];
      this.reptiles[j] = temp;
    }
  }

  random(count: number = 1, allowDupes?: boolean): Array<string> {
    let selected: Array<string> = [];

    if (!allowDupes && count > this.reptiles.length) {
      throw new Error(`Can't ensure no dupes for that count`);
    }

    for (let i: number = 0; i < count; i++) {
      if (allowDupes) {
        // Dupes are cool, so let's just pull random reptiles
        selected.push(this.reptiles[
          Math.floor(Math.random() * this.reptiles.length)
        ]);
      } else {
        // Dupes are no go, shuffle the array and grab a few
        this.shuffle();
        selected = this.reptiles.slice(0, count);
      }
    }

    return selected;
  }
}

const reptile = new Reptile();
console.log(`With Dupes: ${reptile.random(10, true)}`);
console.log(`And Without: ${reptile.random(10)}`);

上面的脚本从数组中提取随机值并返回两个不同类型爬行动物的列表:一个有重复项,一个没有。同样,如果您愿意,您可以使用自己的脚本。

确保您的脚本返回一个值并将某些内容打印到控制台。您将希望查看代码的结果。准备好 TypeScript 脚本后,您现在可以继续运行您的脚本。

第 2 步 – 运行脚本

在使用 之前ts-node,最好先了解使用 Node.js 运行 TypeScript 脚本时会发生什么。

您将reptile.ts使用以下node命令运行脚本(或您自己的 TypeScript 脚本)

  • node reptile.ts

运行此命令后,您将看到一条错误消息:

Output
SyntaxError: Unexpected identifier

SyntaxError: Unexpected identifier消息专门指出了第二行的私有类变量reptile.ts

使用 Node 运行 TypeScript 脚本会返回错误。现在你知道什么不该做,什么时候去做。这是ts-node进来的地方。

使用ts-node运行reptile.ts脚本:

  • npx ts-node reptile.ts

如果您想了解更多关于npx command 的信息,它现在是 npm 附带的一个工具,允许您从命令行运行项目本地的二进制文件。

您将通过运行此脚本看到以下输出:

Output
With Dupes: Komodo Dragon,Python,Tortoise,Iguana,Turtle,Salamander,Python,Python,Salamander,Snake And Without: Alligator,Iguana,Lizard,Snake,Tortoise,Chameleon,Crocodile,Komodo Dragon,Turtle,Salamander

运行reptile.tswithts-node将返回两个爬行动物类型列表,一个可能有重复项,一个没有。ts-node命令有效地运行 TypeScript 脚本。但是有一种方法可以让它更快。

第 3 步 – 加快速度

在幕后,ts-node获取您的脚本,进行一些语义检查以确保您的代码没有错误,然后将您的 TypeScript 编译为 JavaScript。

这是最安全的选择。但是如果你不担心 TypeScript 错误,你可以传入-Tor--transpileOnly标志。这个标志告诉ts-node转换成 JavaScript 而不检查任何 TypeScript 错误。

虽然并不总是建议使用此标志,但在某些情况下它是有意义的。如果您正在尝试运行其他人的脚本,或者您确信您的编辑器和 linter 正在捕获所有内容,则使用-Tor--transpileOnly标志是合适的。

  • npx ts-node -T reptile.ts

运行此命令将为您提供与npx ts-node reptile.ts. 还有更多ts-node可以做的。此命令还提供了一个 TypeScript REPL。

第 4 步 – 使用 TypeScript REPL

另一个额外的好处ts-node是能够使用类似于在node没有任何选项的情况下运行的 TypeScript REPL(读取-评估-打印循环)

这个 TypeScript REPL 允许您直接在命令行上编写 TypeScript,并且对于快速测试某些东西非常方便。

要访问 TypeScript REPL,请在ts-node不带任何参数的情况下运行

  • npx ts-node

现在,您可以在您最喜欢的终端中享受 TypeScript 提供的所有严格性!

结论

在本文中,您曾经ts-node运行过 TypeScript 脚本。您还将 TypeScript REPL 与ts-node.

如果你有兴趣进一步使用 TypeScript,你可以找到这个 [How To Work With TypeScript in Visual Studio Code](digitalocean.com/community/tutorials/how-to-work-with-typescript-in-visual-studio -code) 文章很有用。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁