为什么 dom 和 dom.iterable 是分开的?

问题描述 投票:0回答:2

tsconfig.json
中,您可以定义额外的库,为您提供 HTML 或 DOM“库”的类型(?我不知道正确的术语)。

我不明白为什么

dom
dom.iterable
是分开的。它们是在不同的 ecma 模块/版本中定义的吗?我可以安全地使用它们吗?

javascript typescript dom tsconfig
2个回答
18
投票

我怀疑这是因为迭代(iterables 和 iterators)直到 ES2015 才被添加到 JavaScript 中,而这距离 TypeScript 已经很成熟很久了。当 ES2015 发布时,许多浏览器中的 JavaScript 引擎还不支持迭代,1 当然,当时 Internet Explorer 仍然是一个……永远不会获得新功能的东西。因此,有些项目必须针对没有迭代的环境,因此库是分开的。

即使到了 2022 年,IE 仍然在企业和政府安装中生存下来(尽管幸运的是,情况最终发生了变化),有些人必须将他们的应用程序和页面定位到这些环境,所以他们不想使用 dom.iterable

ES2015 是该规范的最后一个版本,其中包含尚未在该领域实现的重要功能。如今,TC39 遵循的
流程

通常不会在规范中引入功能,直到(理想情况下)在现场有几个功能交付的实现。相反,该提案会一直停留在第 3 阶段,直到出现这种情况,然后在 TC39 会议上达成共识,进入第 4 阶段,添加到编辑草稿中,从而在接下来的 6 月进入下一个快照规范。


5
投票
lib

选项进行一些澄清。由于

不应用相同的分离概念
简历:

dom

dom.iterable
单独
其余的库包含的es2022 包括所有
es2022.*
变体的其余部分(完整版本除外。
es2022.full
包括
es2022 + others

dom 和 dom.iterable

dom

不包括

dom.iterable
。原因如下:
正如这里所示 [

lib.dom.iterable.d.ts#L37

, lib.dom.d.ts#L2726] 例如:

您可以看到 iterable 扩展了 dom lib 并添加了 iterable 实现。

其他库呢

es2022

es2022.array
,....

相同的概念不适用

es2022 包括所有其他内容,如下所示:

lib.es2022.d.ts

带有删除注释的 es2022 文件

/// <reference no-default-lib="true"/> /// <reference lib="es2021" /> /// <reference lib="es2022.array" /> /// <reference lib="es2022.error" /> /// <reference lib="es2022.intl" /> /// <reference lib="es2022.object" /> /// <reference lib="es2022.sharedmemory" /> /// <reference lib="es2022.string" />

完整版(es2022.full)

还有更多功能:

lib.es2022.full.d.ts

它甚至包括

dom

dom.iterable
等等。意思是如果您使用完整版本。您不需要包含
dom
也不需要
dom.iterable
/// <reference no-default-lib="true"/>


/// <reference lib="es2022" />
/// <reference lib="dom" />
/// <reference lib="webworker.importscripts" />
/// <reference lib="scripthost" />
/// <reference lib="dom.iterable" />

© www.soinside.com 2019 - 2024. All rights reserved.