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" />
之后它编译没有错误。
在那里我可以写通过一饮而尽
强烈建议你不要使用全局模块使用反应打字稿及自动编译为JS模块。改为使用--module commonjs
进行编译,并采用react/webpack/nodejs生态系统。
你可以在这里签一个示例应用程序:https://github.com/basarat/tsb/tree/master
嘿谢谢你的回答!我不应该这样做的原因是什么?这是为了防止我想加载外部库,我不能要求然后必须通过脚本标记加载它们吗? –
虽然我认为这个答案是正确的选择,但对于我能够从上述示例应用程序中使用它的解释太少。在尝试从样本中复制样式时,无论出于何种原因,我的模块都会引用'__React'。 –
我遇到了以下问题,主要是由于__React全局以及许多反应包声明文件。 http://stackoverflow.com/questions/38441400/issues-installing-react-related-type-definitions-with-typings – jpierson
是否有使用'typings',而不是'tsd'任何类似的解决方案? – jpierson