我的HTML包含以下内容:
<script src="js/vendor/react.js"></script>
<script src="js/vendor/react-dom.js"></script>
<script type="text/javascript" src="my-react-component.js"></script>
...我正在尝试在Visual Studio 2015中编写一个简单的TSX文件,以转换为my-react-component.js
:
/// <reference path="../../typings/tsd.d.ts" />
class ExampleApplication extends React.Component<any, {}> {
render() {
return <p>{this.props.message}</p>;
}
};
ReactDOM.render(
<ExampleApplication message="Hello, world" />,
document.getElementById('container')
);
我已经从 DefinitelyTyped 导入了react.d.ts
和react-dom.d.ts
,并将其包含在我的tsd.d.ts
问题是:除非我明确导入它们,否则TypeScript将无法识别“React”和“ReactDOM”:
import * as React from "react";
import * as ReactDOM from "react-dom";
这适用于编辑.tsx(实际上我为这些命名空间获得了完整的IntelliSense)。
但是转换后的.js - 使用“React”JSX编译选项 - 包括不需要的需要:
var React = require("react");
var ReactDOM = require("react-dom");
这导致页面执行出错,因为React和ReactDOM都是react.js定义的全局名称,并且没有“require”函数可用。
是否有办法将这些名称声明为TypeScript,而不会为每个名称发出实际需求?
否则 - 我正在尝试做什么错了?我错过了什么?
答案 0 :(得分:0)
是不是有办法将这些名称声明为TypeScript,而不会为每个名称发出实际要求?
有。使用TypeScript定义的全局版本:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/react/react-global.d.ts
否则 - 我试图做的事情出了什么问题?我在做什么?
使用全局模块是一个坏主意。一旦扩展到大约50个文件(发生得非常快)https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md
,您将遇到问题