Typescript intellisense不需要发光

时间:2016-01-21 23:15:33

标签: reactjs typescript visual-studio-2015 intellisense react-jsx

我的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.tsreact-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,而不会为每个名称发出实际需求?

否则 - 我正在尝试做什么错了?我错过了什么?

1 个答案:

答案 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

,您将遇到问题