【问题标题】:@types/react cannot find name 'HTMLDialogElement'@types/react 找不到名称“HTMLDialogElement”
【发布时间】:2018-07-25 09:37:01
【问题描述】:

我在使用 typescript 和 @types/react 时遇到了一个奇怪的构建问题。我有两个 typescript 配置文件:一个用于使用 react 的文件,一个用于不使用 react 的文件。在构建不使用 react 的项目部分时,我看到以下错误:

node_modules/@types/react/index.d.ts(3508,58):错误 TS2304:不能 找到名称“HTMLDialogElement”。 node_modules/@types/react/index.d.ts(3508,78):错误 TS2304:不能 找到名称“HTMLDialogElement”。 node_modules/@types/react/index.d.ts(3782,72):错误 TS2304:不能 找到名称“HTMLDialogElement”。 node_modules/@types/react/index.d.ts(3782,92):错误 TS2304:不能 找到名称“HTMLDialogElement”。

我能够通过一个最小的示例重现该错误:

node_modules/typescript/bin/tsc typescript/foo.ts --outDir static/js/src --module none

typescript/foo.ts 文件是我用来重现问题的最小文件,并且故意缩短:

function printNumber(n: number) {
    console.log(n);
}

let x = 3;
x *= 4;
printNumber(x);

请注意,foo.ts 没有任何引用来做出任何反应。最奇怪的部分是当我卸载 @types/react 时,错误消息消失了。

发生了什么事?

编辑:我找到了this issue,它在 tsc 版本 > 2.3.2 时出现。我将 tsc 降级到 2.3.2 版本,但问题仍然存在。

【问题讨论】:

  • 您使用的是什么版本的打字稿?我有一个类似的问题,当我更新到 2.7.x 时它就消失了
  • @Ziggy typescript v 2.3.2
  • 遇到同样的问题。
  • 你能提供一个这个错误的最小例子吗? (带有配置)
  • 从今天开始面临同样的问题......

标签: javascript reactjs typescript


【解决方案1】:

根据我对打字稿政策的理解,这与您使用的版本有关。当 typescript 2.3.2 出现时,HTMLDialogElement 的定义未包含在@types/react 中,因此您会看到此错误。您可以在this github issue 中阅读更多相关信息。

很可能,即使您没有在 foo.ts 中包含 React,typescript 编译器也会包含并检查您拥有的所有定义,甚至是 node_modules 中的定义。这将解释为什么即使不包含 React 也会出现此错误。

现在我想了想,我没有包含我编写的定义 - 但它们被转译器使用。

我在昨天最近克隆的一个项目中遇到了同样的问题;我通过将 typescript 更新为 ^2.7.0 来修复它。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。尝试了此处提到的所有升级和降级。但是,对我没有任何帮助。最终在 node_modules/@types/react/index.d.ts 中注释掉第 3782 和 3508 行的“对话框” 这只是一个快速修复。

    【讨论】:

    • 你在使用create-react-app-typescript吗?我记得有问题,因为如果您迁移到 2.13 版 typescript 包必须手动安装,也许您已经更新了全局版本。不知道是不是你的情况……希望对你有帮助!
    【解决方案3】:

    我遇到了同样的问题(最新的 create-react-app,typescript 版本为 2.5.3),在我弹出应用程序(npm runeject)并手动将 typescript 更新到 package.json 中的当前版本到当前版本后,它是 2.7。 2 这又起作用了。

    似乎是一些非常奇怪的错误(在 Windows 上),因为我的大学(相同的安装)没有这个错误。当搜索这个时,你会发现它每 2 个月左右出现一次,所以我猜,这不仅仅是这个问题 (https://github.com/Microsoft/TypeScript/issues/16880) Duma 指出,因为我们正在研究的项目是在 12 月的某个地方开始的。

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2017-09-22
      • 2019-11-25
      • 2018-02-12
      • 2023-01-05
      • 2019-11-15
      相关资源
      最近更新 更多