TypeScript命令行编译成功完成但显示错误

时间:2015-09-18 05:09:49

标签: reactjs typescript react-jsx typescript1.6

我正在阅读以下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

2 个答案:

答案 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 命名空间,不需要上面的黑客攻击