我遇到了与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,但问题仍然存在。
答案 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指出,导致我们正在进行的项目开始于某个地方腊。