我正在阅读以下JSX TypeScript教程:https://github.com/RyanCavanaugh/jsx-intro
使用tsc.cmd -w
命令,以下代码在浏览器中成功编译并执行,但我仍然在控制台中出错:
// app.tsx
var content = <div>Hello, world!</div>;
$(() => {
let target = document.getElementById('output');
React.render(content, target);
});
`
app.tsx(30,16): error TS2304: Cannot find name 'React'.
<br>app.tsx(34,5): error TS2304: Cannot find name 'React'.
<br>message TS6042: Compilation complete. Watching for file changes.
`
即使编译成功,为什么我仍然会收到错误?如何摆脱错误?
我正在使用TypeScript 1.6
答案 0 :(得分:0)
即使编译成功,为什么我仍然会收到错误
仅仅因为你从打字稿中获取js并不意味着编译成功。以下是有关此主题的更多信息:Type errors do not prevent JavaScript emit。
如何摆脱错误
您需要react.d.ts
文件(tsd install react
)(more)
答案 1 :(得分:0)
basarat回答了我的第一个问题,但我仍然遇到了编译错误的问题。
再次查看错误之后,我意识到TypeScript编译器无法找到 React ,但它似乎没有找到JQuery的问题。所以我打开了React.d.ts文件,果然,这就是问题所在。 React名称空间的名称为__React
,而不是React
。像这样别名命名空间
import React = __React;
允许我摆脱TypeScript错误,但遗憾的是,应用程序希望找到一个名为 __ React 的全局变量。但是从Bower下载的React库有一个名为 React 的变量,如你所料。
我在index.html文件中包含react脚本后添加了以下脚本
<script>var __React = React;</script>
这允许应用程序运行。
我不确定为什么类型定义文件具有该命名空间,或者如果我正在解决问题正确的方式,但这现在解决了我的问题。
<强>更新强>
我找到了更好的方法...安装react-global tsd install react-global
会暴露 React 命名空间,不需要上面的黑客攻击