有没有直接执行 TypeScript 代码的引擎?

Isl*_*her 7 node.js typescript ts-node deno

当我第一次学习TypeScript时,我发现node.js不执行TypeScript,因此你需要安装一个TypeScript编译器来将你的TypeScript代码转换为JavaScript。

我一直在搜索,直到找到ts-node(Node.js 的 TypeScript 执行和 REPL),但是当我阅读文档时,我发现它们执行相同的操作(此处)。甚至deno(JavaScript 和 TypeScript 的现代运行时)也在做同样的事情(此处)。

所以我的问题是:是否有任何引擎可以执行 TypeScript 代码而不将其转换为 JavaScript?

Mar*_*ers 5

不,从这个意义上来说,TypeScript 并不是一种“独立”语言。它现在是并且永远是 JavaScript 的超集。这就是为什么 TypeScript 编译器通常被称为转译器:它不会编译为较低级别的语言。tsc运行检查后,它只需删除所有 TypeScript 构造即可将现有源代码转换为 JavaScript。

来自官方 TypeScript 手册的介绍

TypeScript 的目标是成为 JavaScript 程序的静态类型检查器 - 换句话说,是一种在代码运行之前运行的工具(静态)并确保程序的类型正确(经过类型检查)。

因此,为了执行 TypeScript,您始终需要一个 JavaScript 引擎。您也可以改编现有的 JavaScript 引擎(或构建自己的引擎)来理解 TypeScript,但它仍然首先必须是符合ECMAScript 规范的引擎。

德诺也不例外。它有一个内置的 TypeScript 编译器,它是官方编译器的副本。来自Deno 手册的 TypeScript 章节

在较高层面上,Deno 将 TypeScript(以及 TSX 和 JSX)转换为 JavaScript。它通过我们在 Deno 中构建的 TypeScript 编译器和名为 swc 的 Rust 库的组合来实现这一点。当代码经过类型检查和转换后,它会存储在缓存中,为下次运行做好准备,而无需再次将其从源代码转换为 JavaScript。

转译后,Deno 在 Google 的 V8 引擎上运行输出 JavaScript,该引擎与 NodeJS 和 Chrome 中使用的引擎相同。

  • 我不认为答案是_明显是_。作者已经在自己的文章中提到,他们并不将 Deno 视为 TypeScript 引擎,因为它在内部只运行与您手动运行的相同的转译器。这就是为什么我在评论中写道“这取决于你如何看待它”。如果您将 Deno 视为黑匣子,那么它确实“运行”TypeScript。但对我来说,V8 引擎是执行代码的引擎,而该代码就是 JavaScript。对我来说,从 TS 到 JS 的隐式转换是 Deno 的一个方便开发人员的功能,而不是它与 Node+TS 的操作方式的根本区别。 (5认同)
  • [Deno](https://deno.land/) 怎么样?它不执行 TypeScript 吗?_“Deno 的好处之一是,在 Deno 中运行代码时,它将 TypeScript 视为一流语言,就像 JavaScript 或 Web Assembly 一样。这意味着您可以运行或导入 TypeScript,而无需安装 Deno CLI 以外的任何东西."_ (4认同)
  • 这取决于你怎么看了。是的,它“执行”TypeScript,因为您可以直接向它提供 TypeScript 文件,而无需先运行“tsc”。但在内部,它只是为你做“tsc”。Deno 附带一个内置的 TypeScript 编译器,它是官方编译器的副本。然后,转译后的 JavaScript 在 Google 的 V8 引擎上运行,与 NodeJS 或 Chrome 没有什么不同。 (2认同)
  • 问题是“有没有直接执行 TypeScript 代码的引擎?”显而易见的答案是:是的,可以。Deno 将在内部为您处理这个问题。当然,每种编程语言都必须翻译成机器代码(通过一个或多个步骤)。没有 CPU 可以运行 JavaScript 或 C++ 或任何其他语言。 (2认同)
  • 所以你是说如果不将 TypeScript 转换为 JavaScript,就不可能编写一个解释和评估 TypeScript 的引擎?你确定这不存在,即使作为概念的科学证明? (2认同)