@ types / react找不到名字'HTMLDialogElement'

时间:2018-02-14 18:02:10

标签: javascript reactjs typescript

我遇到了与typescript和@types/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,但问题仍然存在。

3 个答案:

答案 0 :(得分:9)

我理解打字稿的政策是公平的,这与您使用的版本有关。当typescript 2.3.2出来时,@types/react中没有包含HTMLDialogElement的定义,因此您会看到此错误。您可以在this github issue中了解详情。

也许,即使你没有在你的foo.ts上包含React,打字稿编译器也会包含并检查你所拥有的所有定义,甚至包括node_modules中的定义。这将解释为什么即使不包含React也会出现此错误。

现在我想起来了,我的事件并不包括我写的定义 - 但它们被转录器使用了。

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

答案 1 :(得分:0)

我遇到了同样的问题。尝试了这里提到的所有升级和降级。但是,没有什么对我有用。终于在node_modules/@types/react/index.d.ts中从第3782和3508行注释出“对话框”了 这只是一个快速修复。

答案 2 :(得分:0)

我遇到了同样的问题(最新的create-react-app,打字稿版本为2.5.3),之后我弹出了应用程序(npm run eject)并手动更新了打字稿到package.json中的当前版本到当前版本2.7。 2这又有效了。

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