在
tsconfig.json
中,您可以定义额外的库,为您提供 HTML 或 DOM“库”的类型(?我不知道正确的术语)。
我不明白为什么
dom
和dom.iterable
是分开的。它们是在不同的 ecma 模块/版本中定义的吗?我可以安全地使用它们吗?
我怀疑这是因为迭代(iterables 和 iterators)直到 ES2015 才被添加到 JavaScript 中,而这距离 TypeScript 已经很成熟很久了。当 ES2015 发布时,许多浏览器中的 JavaScript 引擎还不支持迭代,1 当然,当时 Internet Explorer 仍然是一个……永远不会获得新功能的东西。因此,有些项目必须针对没有迭代的环境,因此库是分开的。
即使到了 2022 年,IE 仍然在企业和政府安装中生存下来(尽管幸运的是,情况最终发生了变化),有些人必须将他们的应用程序和页面定位到这些环境,所以他们不想使用 dom.iterable
。ES2015 是该规范的最后一个版本,其中包含尚未在该领域实现的重要功能。如今,TC39 遵循的
通常不会在规范中引入功能,直到(理想情况下)在现场有几个功能交付的实现。相反,该提案会一直停留在第 3 阶段,直到出现这种情况,然后在 TC39 会议上达成共识,进入第 4 阶段,添加到编辑草稿中,从而在接下来的 6 月进入下一个快照规范。
lib
选项进行一些澄清。由于
不应用相同的分离概念。 简历:
dom
、
是dom.iterable
单独。 其余的库是包含的。es2022
包括所有变体的其余部分(完整版本除外。es2022.*
包括es2022.full
) dom 和 dom.iterablees2022 + others
dom
不包括
dom.iterable
。原因如下:正如这里所示 [lib.dom.iterable.d.ts#L37, lib.dom.d.ts#L2726] 例如:
您可以看到 iterable 扩展了 dom lib 并添加了 iterable 实现。
其他库呢
es2022
,
es2022.array
,....相同的概念不适用。 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.tsdom
、
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" />