我可以显式导入 dom 类型吗?

Dav*_*lsh 8 typescript typescript-typings

按照惯例,开发人员会在全球范围内包含全局 dom 类型并在全球范围内使用它们。

{
  "compilerOptions": {
    "lib": [
      "dom"
    ]
  },
}
Run Code Online (Sandbox Code Playgroud)

是否可以显式使用 dom 类型?

就像是:

import { MessagePort, HTMLElement } from 'dom'
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 7

你可能不import来自lib.dom.d.ts;它不是一个模块,并提供应在全局命名空间中可用的声明。但是,您可以通过从使用该库的文件中添加对所需库的引用来避免更改 tsconfig.json。

\n\n

要在 Typescript 文件中表达对 DOM 库的引用,您可以使用三斜杠指令\xe2\x80\x94(具体而言, )lib="dom",它定义了HTMLElementMessagePort

\n\n

如文档所述,这必须出现在文件的顶部(其他注释除外):

\n\n
/// <reference lib="dom" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

另请参阅: 我可以导入 *.d.ts 而不是 require 它吗?

\n

  • 但是[在 .d.ts 打字稿声明文件中使用 /// &lt;reference lib="dom" /&gt; 具有全局效果](https://github.com/microsoft/TypeScript/issues/33901); 所以你的整个项目最终将在全局范围内得到 lib.dom 值。 (6认同)
  • @RobertTupelo-Schneck 是的;这是设计使然的。Typescript 假设,如果您在需要并使用这些定义的执行环境中运行,则应该将它们全部包含在内。我可以理解为什么您可能需要特定的接口或定义而不是所有内容,但据我所知,Typescript 不支持这一点,如果支持的话,我会很高兴地对我的答案投赞成票。与此同时,Ryan 在一个与您链接的问题相对应的问题中推荐了[单独的 tsconfig 文件](https://github.com/microsoft/TypeScript/issues/39100#issuecomment-645458394)。 (2认同)