”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Node.js 没有实现 TypeScript

Node.js 没有实现 TypeScript

发布于2024-11-01
浏览:465

Node.js did not implement TypeScript

一篇关于 Node.js 没有实现 TypeScript 的原因的简短文章。

首先要事

接下来是 Node.js 中关于 TypeScript 的已经尚未完成的解释。

本文无意批评 Node.js 团队或 TypeScript 团队。

事实上,恰恰相反。

我认真地认为 Node.js 团队在按照他们的方式“实现”TypeScript 方面做出了最佳选择。

我在这里真正强调的是 Node.js 没有实现 TypeScript。他们只是添加了某种支持。我认为这是一个重要的区别,在有关 Node.js 和 TypeScript 的讨论中经常被忽视。

在过去的几周里,我统计了我读过的时事通讯中引用的 50 多篇文章提到 Node.js 实现了 TypeScript。

我认为是时候彻底澄清这一点了。

剧透警告:Node.js 未实现 TypeScript。

TypeScript:简史和一些数据

2010 年,微软发布了 TypeScript,这是 JavaScript 的超集,为该语言添加了静态类型。 TypeScript 旨在解决 JavaScript 的一些缺点,例如缺乏类型安全性和维护大型代码库的困难。自发布以来,TypeScript 受到了开发人员的欢迎,许多项目都采用它作为主要语言。

根据最新的 JS 现状调查,TypeScript 几乎无处不在。 78% 的开发人员至少 50% 的开发时间都在使用 TypeScript,因此难怪 “Node.js 实现了 TypeScript” 的回声甚至到达了 Web 最深刻的角落。

但是,需要澄清的是,这并没有发生。它可能永远不会。

问题

Node.js 没有实现 TypeScript 有几个原因。以下是我认为最重要的两个:

#1:TypeScript 在运行时注入东西。

你知道枚举在运行时会变成什么吗?一个对象。

幸运的是,这只是 TypeScript 如何在运行时注入东西的几个例子之一。这对于 Node.js 来说是一个问题,因为这意味着运行时必须了解 TypeScript 的功能,这会带来大量的复杂性和开销。

如果 Node.js 希望保持与 ECMAScript 的一致性,并且在其余下的存在中不必处理依赖关系管理,则它不能接受 TypeScript 作为当前形式的依赖关系。

#2:语义版本控制。

TypeScript 不遵循语义版本控制 (semver)。

另一方面,Node.js 严格遵循 semver,并具有三个不同的发行版(目前,我们有 18.x、20.x、22.x)。这意味着可以在次要版本或补丁版本中引入重大更改,这可能会导致现有代码的兼容性问题。

此外,支持的平台数量巨大,因此控制一切并不容易。

Node.js 根本无法接受 TypeScript 作为依赖项,因为它会破坏 semver。这是阻止 Node.js 实现 TypeScript 的一个根本问题。

那么,他们做了什么?

这就是混乱出现的地方。 Node.js 没有实现 TypeScript,但他们确实在实验性标志下添加了类型剥离。此功能允许开发人员编写 TypeScript 代码并将其编译为 JavaScript,而无需类型信息。这是一种妥协,允许开发者在 Node.js 中使用 TypeScript,而不会引入上述问题。

你想要一个例子吗?干得好:

function sum(a: number, b: number): number {
  return a   b;
}

这个函数,当使用 --experimental-strip-types 标志编译时,将变成:

function sum(a        , b        )         {
  return a   b;
}

你看到了吗?类型消失了,并被空格取代。 但是,为什么?,您可能会问。好吧,因为这样做可以保留源映射引用,而无需为这些引用进行单独的构建过程。

在内部,这是通过一个名为 amaro 的包来完成的,它包装了 swc——一个著名的构建工具,它执行实际的剥离。

当然,限制是存在的,例如无法使用 TypeScript 特定的功能,如前面提到的 enums。但是,这仍然是向前迈出的一大步,可以防止人们编写 135 个配置文件来使 sum 函数接受两个数字并返回第三个数字。

再见,
迈克尔。

版本声明 本文转载于:https://dev.to/cadienvan/nodejs-did-not-implement-typescript-1k4p?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-03-12
  • UTF-8 vs. Latin-1:字符编码大揭秘!
    UTF-8 vs. Latin-1:字符编码大揭秘!
    [utf-8和latin1 在他们的应用中,出现了一个基本问题:什么辨别特征区分了这两个编码?超出其字符表现能力,UTF-8具有额外的几个优势。从历史上看,MySQL对UTF-8的支持仅限于每个字符的三个字节,这阻碍了基本多语言平面(BMP)之外的字符的表示。但是,随着MySQL 5.5的出现,...
    编程 发布于2025-03-12
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-03-12
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-03-12
  • Part SQL注入系列:高级SQL注入技巧详解
    Part SQL注入系列:高级SQL注入技巧详解
    [2 Waymap pentesting工具:单击此处 trixsec github:单击此处 trixsec电报:单击此处 高级SQL注入利用 - 第7部分:尖端技术和预防 欢迎参与我们SQL注入系列的第7部分!该分期付款将攻击者采用的高级SQL注入技术 1。高...
    编程 发布于2025-03-12
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-03-12
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-03-12
  • 我们如何保护有关恶意内容的文件上传?
    我们如何保护有关恶意内容的文件上传?
    对文件上载上传到服务器的安全性问题可以引入重大的安全风险,因为用户可能会提供潜在的恶意内容。了解这些威胁并实施有效的缓解策略对于维持应用程序的安全性至关重要。用户可以将文件名操作以绕过安全措施。避免将其用于关键目的或使用其原始名称保存文件。用户提供的MIME类型可能不可靠。使用服务器端检查确定实际...
    编程 发布于2025-03-12
  • 如何使用JavaScript中的正则表达式从字符串中删除线路断裂?
    如何使用JavaScript中的正则表达式从字符串中删除线路断裂?
    在此代码方案中删除从字符串在JavaScript中解决此问题,根据操作系统的编码,对线断裂的识别不同。 Windows使用“ \ r \ n”序列,Linux采用“ \ n”,Apple系统使用“ \ r。” 来满足各种线路断裂的变化,可以使用以下正则表达式: [&& && &&&&&&&&&&&...
    编程 发布于2025-03-12
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-03-12
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-03-12
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-12
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-03-12
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-03-12
  • Java HashSet/LinkedHashSet随机元素获取方法详解
    Java HashSet/LinkedHashSet随机元素获取方法详解
    在编程中找到一个随机元素,在编程中找到一个随机元素,从集合(例如集合)中选择一个随机元素很有用。 Java提供了多种类型的集合,包括障碍物和链接HASHSET。本文将探讨如何从这些特定集合实现的过程中选择一个随机元素。的java的hashset和linkedhashset a HashSet代表...
    编程 发布于2025-03-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3