TypeScript,React和Gulp.js - 定义反应

问题描述:

我想制作一个工作流程,我可以使用TypeScript编写React模块,并通过Gulp.js自动编译为JavaScript。我正在使用TypeScript 1.6.2,gulp-react和gulp-typingcript。TypeScript,React和Gulp.js - 定义反应

.tsx文件现在看起来是这样的:

/// <reference path="../../../../typings/react/react.d.ts" /> 
import React = __React; 
interface HelloWorldProps { 
    name: string; 
} 

var HelloMessage = React.createClass<HelloWorldProps, any>({ 
    render: function() { 
     return <div>Hello {this.props.name}</div>; 
    } 
}); 
React.render(<HelloMessage name="helloooo" />, document.getElementById('test')); 

我的问题是这样的一行:import React = __React;

当我离开它,我得到的错误

错误TS2304:不能找到名字'React'。'

当编译.tsx.js(但它仍然编译为JSX,我可以使用输出)。当我把它放入时,我可以毫无错误地进行编译,但是当我尝试在浏览器中使用该文件时,当然会得到Uncaught ReferenceError: __React is not defined

这是我gulptask看起来像:

gulp.task('gui-tsx', function() { 
    var tsResult = gulp.src(config.guiSrcPath + 'tsx/app.tsx') 
     .pipe(ts({ 
      jsx: 'react' 
     })); 
    return tsResult.js.pipe(gulp.dest(config.guiSrcPath + 'jsx')); 
}); 

是否有解决方法吗?或者我在这里错过了什么?

好的,我找到了解决方案。首先安装通过tsd的阵营全局定义:

tsd install react-global 

这将创建一个文件,react-global.d.ts,在你typings目录中,您必须在您引用根组件文件(路径是相对的,所以它调整到您的需求):

/// <reference path="../../../../typings/react/react-global.d.ts" /> 

之后它编译没有错误。

+0

是否有使用'typings',而不是'tsd'任何类似的解决方案? – jpierson

在那里我可以写通过一饮而尽

强烈建议你不要使用全局模块使用反应打字稿及自动编译为JS模块。改为使用--module commonjs进行编译,并采用react/webpack/nodejs生态系统。

你可以在这里签一个示例应用程序:https://github.com/basarat/tsb/tree/master

+1

嘿谢谢你的回答!我不应该这样做的原因是什么?这是为了防止我想加载外部库,我不能要求然后必须通过脚本标记加载它们吗? –

+0

虽然我认为这个答案是正确的选择,但对于我能够从上述示例应用程序中使用它的解释太少。在尝试从样本中复制样式时,无论出于何种原因,我的模块都会引用'__React'。 –

+0

我遇到了以下问题,主要是由于__React全局以及许多反应包声明文件。 http://stackoverflow.com/questions/38441400/issues-installing-react-related-type-definitions-with-typings – jpierson