0

我正在浏览以下 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

4

2 回答 2

0

为什么编译成功还是报错

仅仅因为你从 typescript 得到 js 并不意味着编译成功。这里有更多关于该主题的内容:类型错误不会阻止 JavaScript 发出

如何摆脱错误

您需要react.d.ts文件 ( tsd install react) (更多)

于 2015-09-18T05:14:41.620 回答
0

basarat 回答了我的第一个问题,但我仍然遇到编译错误的问题。

再次查看错误后,我意识到 TypeScript 编译器找不到React,但找到 JQuery 似乎没有问题。所以我打开了 React.d.ts 文件,果然,这就是问题所在。React 命名空间被命名__ReactReact. 像这样给命名空间起别名

import React = __React;

让我摆脱了 TypeScript 错误,但不幸的是,该应用程序希望找到一个名为__React的全局变量。但是从 Bower 下载的 React 库有一个名为React的变量,正如您所期望的那样。

我在 index.html 文件中包含反应脚本之后添加了以下脚本

<script>var __React = React;</script>

这允许应用程序运行。

我不确定为什么类型定义文件有那个命名空间,或者我是否以正确的方式解决了这个问题,但这暂时解决了我的问题。

更新

我找到了一种更好的方法...安装 react-globaltsd install react-global会暴露React命名空间,从而不需要上述 hack

于 2015-09-18T06:18:21.383 回答