如何使用ts-node运行TypeScript脚本
介绍
TypeScript 越来越受欢迎。 由于 TypeScript 是 JavaScript 的超集,因此使用它意味着在 V8 引擎能够理解它们之前将您的 TypeScript 文件编译为纯 JavaScript。 您可以观察文件更改并自动编译。 但有时,您只想运行脚本并获得结果。 这就是 ts-node 的用武之地。 使用 ts-node
,您可以跳过大惊小怪,轻松执行您的 TypeScript 脚本。
先决条件
要成功完成本教程,您将需要以下内容:
- 您的机器上安装了最新版本的 Node。 您可以按照 如何安装 Node.js 并创建本地开发环境 教程来完成此操作
- 熟悉
npm
。 要了解有关使用npm
的更多信息,请阅读此 How To Use Node.js Modules with npm and package.json 教程 - 熟悉 TypeScript。 这篇 如何设置新的 TypeScript 项目 文章是一个很好的起点。
第 1 步 — 入门
首先,您需要安装 typescript
和 ts-node
:
npm install typescript ts-node
由于 ts-node
是您可以运行的可执行文件,因此您的脚本中没有 import
或 require
的内容。
如果您还没有要使用的 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 脚本时会发生什么。
您将使用 node
命令运行 reptile.ts
脚本(或您自己的 TypeScript 脚本):
node reptile.ts
运行此命令后,您将看到一条错误消息:
OutputSyntaxError: Unexpected identifier
SyntaxError: Unexpected identifier
消息在 reptile.ts
的第二行特别指出了私有类变量。
使用 Node 运行 TypeScript 脚本会返回错误。 既然您知道什么不该做,以及当您做的时候会发生什么。 这就是 ts-node
的用武之地。
使用 ts-node
运行 reptile.ts
脚本:
npx ts-node reptile.ts
如果您想了解有关 npx 命令 的更多信息,它是现在 npm 附带的一个工具,允许您从命令行运行项目本地的二进制文件。
您将看到运行此脚本的输出:
OutputWith 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
使用 ts-node
运行 reptile.ts
将返回两个爬行动物类型列表,一个可能有重复,一个没有。 ts-node
命令有效地运行 TypeScript 脚本。 但是有一种方法可以让它更快。
第 3 步 — 加快速度
在后台,ts-node
获取您的脚本,进行一些语义检查以确保您的代码没有错误,然后将您的 TypeScript 编译成 JavaScript。
这是最安全的选择。 但如果你不担心 TypeScript 错误,你可以传入 -T
或 --transpileOnly
标志。 这个标志告诉 ts-node
在不检查任何 TypeScript 错误的情况下转译为 JavaScript。
虽然并不总是建议使用此标志,但在某些情况下它是有意义的。 如果您尝试运行其他人的脚本,或者您确信您的编辑器和 linter 可以捕获所有内容,则使用 -T
或 --transpileOnly
标志是合适的。
npx ts-node -T reptile.ts
运行此命令将为您提供与 npx ts-node reptile.ts
相同的输出。 还有更多ts-node
可以做。 此命令还提供 TypeScript REPL。
第 4 步 — 使用 TypeScript REPL
ts-node
的另一个额外好处是能够使用 TypeScript REPL(读取-评估-打印循环),类似于在没有任何选项的情况下运行 node
。
这个 TypeScript REPL 允许您直接在命令行上编写 TypeScript,并且对于快速测试某些东西非常方便。
要访问 TypeScript REPL,请运行不带任何参数的 ts-node
:
npx ts-node
现在,您可以在您最喜欢的终端中享受 TypeScript 提供的所有严格性!
结论
在本文中,您使用 ts-node
运行 TypeScript 脚本。 您还将 TypeScript REPL 与 ts-node
一起使用。
如果您对进一步使用 TypeScript 感兴趣,您可能会发现这篇 如何在 Visual Studio Code 中使用 TypeScript 文章很有用。