介绍
TypeScript 越来越受欢迎。由于 TypeScript 是 JavaScript 的超集,因此使用它意味着在 V8 引擎能够理解它们之前将您的 TypeScript 文件编译为纯 JavaScript。您可以监视文件更改并自动编译。但有时,您只想运行脚本并获得结果。这就是ts-node
切入点。使用ts-node
,您可以跳过大惊小怪并轻松执行您的 TypeScript 脚本。
先决条件
要成功完成本教程,您需要具备以下条件:
- 您的机器上安装了最新版本的 Node。您可以按照如何安装 Node.js 和创建本地开发环境教程来完成此操作
- 熟悉
npm
. 要了解有关使用 的更多信息npm
,请阅读如何将 Node.js 模块与 npm 和 package.json 一起使用教程 - 熟悉 TypeScript。这篇如何设置新的 TypeScript 项目文章是一个很好的起点。
第 1 步 – 入门
要开始工作,您需要安装typescript
和ts-node
:
- npm install typescript ts-node
既然ts-node
是你可以运行一个可执行文件,没有什么对import
或require
在您的脚本。
如果您还没有可以使用的 TypeScript 项目,则可以直接使用此脚本进行测试ts-node
:
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
运行此命令后,您将看到一条错误消息:
OutputSyntaxError: Unexpected identifier
该SyntaxError: Unexpected identifier
消息专门指出了第二行的私有类变量reptile.ts
。
使用 Node 运行 TypeScript 脚本会返回错误。现在你知道什么不该做,什么时候去做。这是ts-node
进来的地方。
使用ts-node
运行reptile.ts
脚本:
- npx ts-node reptile.ts
如果您想了解更多关于npx command 的信息,它现在是 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
运行reptile.ts
withts-node
将返回两个爬行动物类型列表,一个可能有重复项,一个没有。该ts-node
命令有效地运行 TypeScript 脚本。但是有一种方法可以让它更快。
第 3 步 – 加快速度
在幕后,ts-node
获取您的脚本,进行一些语义检查以确保您的代码没有错误,然后将您的 TypeScript 编译为 JavaScript。
这是最安全的选择。但是如果你不担心 TypeScript 错误,你可以传入-T
or--transpileOnly
标志。这个标志告诉ts-node
转换成 JavaScript 而不检查任何 TypeScript 错误。
虽然并不总是建议使用此标志,但在某些情况下它是有意义的。如果您正在尝试运行其他人的脚本,或者您确信您的编辑器和 linter 正在捕获所有内容,则使用-T
or--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) 文章很有用。