从typescript +中的其他文件(相同名称空间)导入类

时间:2016-01-15 10:42:33

标签: reactjs typescript

我有两个文件comment.tsx和commentlist.tsx

comment.tsx看起来像这样:

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

import * as React from "react";
import * as ReactDOM from "react-dom";

namespace W.T.F {
    export class Comment extends React.Component<ICommentData, {}>{
        constructor(props: ICommentData) {
            super(props);
        }

        public render() {
            return (
                <div className="comment">
                <h2 className="commentAuthor">{this.props.Author}</h2>
                <span>{this.props.Text}</span>
                    </div>
            );
        }
    }
}

和commentlist.tsx

/// <reference path="./typings/react/react.d.ts" />
/// <reference path="./typings/react/react-dom.d.ts" />
/// <reference path="comment.tsx" />
/// <reference path="interfaces.d.ts" />

import * as React from "react";
import * as ReactDOM from "react-dom";
import Comment = W.T.F.Comment;

namespace W.T.F {
    export class CommentList extends React.Component<ICommentListData, {}>{
        public render() {
            var commentNodes = this.props.Data.map(function (comment: ICommentData) {
                return (
                    <Comment Author={comment.Author} Text={comment.Text}>{comment.Text}</Comment>
                );
            });
            return (
                <div className="commentList">
                    {commentNodes}
                </div>
            );
        }
    };
}

编译这些文件会带来错误

commentlist.tsx(8,24)TS2305模块'W.T.F'没有导出成员'评论'。

我的来源有什么问题?

从其他文件导入其他反应类(包含在命名空间中)的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果有任何顶级导入,TypeScript会将文件视为外部模块,并且示例中的命名空间将成为模块的一部分。

大多数项目都希望使用没有名称空间的外部模块,但是要按照您尝试的方式使用名称空间,使用这样的旧引用/导入语法,并在名称空间内定义导入:

/// <reference path="./typings/react/react.d.ts" />
namespace W.T.F {
    import React = __React;

    export class Comment extends React.Component<ICommentData, {}>{
        constructor(props: ICommentData) {
            super(props);
        }

        public render() {
            return (
                <div className="comment">
                <h2 className="commentAuthor">{this.props.Author}</h2>
                <span>{this.props.Text}</span>
                    </div>
            );
        }
    }
}