Typescript模块没有导出的成员 - 反应

时间:2016-05-10 19:01:48

标签: javascript reactjs typescript redux

我正在研究react,redux Typescript应用程序。我有一个奇怪的情况,经过一些更改后,其中一个模块已停止导出其成员。

文件夹结构为:

src
|---- components
|---- containers

'components'文件夹包含.tsx文件,而包装.ts文件位于'containers'文件夹中。

下面列出了NodeList.tsx模块:

import * as React from "react";

export const NodeList = (props) => (
    <div id="NodeList">
        <ul>
        {props.items.map((item, i) => (
            <li key={i} >
                <span id={"Item_"+i}>{item}</span>
            </li>
            )
        )}
        </ul>
    </div>
    )

包装容器NodeListContainer是:

import { connect } from "react-redux";
import { Provider } from "react-redux";

import { Nodelist } from "../components/NodeList"

const nodesAsArrayOfType = (state, nodeType: string) => {
    console.log("Going for nodes of type ", nodeType)
    let a = state.data.model.nodes
    let k = Object.keys(a);
    let sub = k.filter((e) => {
                   return a[e].nodeType == nodeType
        }).map((e) => a[e])
    console.log("Got nodes ", sub)    
    return sub
}

const mapStateToProps = (state) => {
    var list = nodesAsArrayOfType(state, state.UIstate.focusNodeType).map((e) => {return JSON.stringify(e)})
    console.log("Returning ", list, list.length)
    return {
        items: list
    }
}

const mapDispatchToProps = (dispatch) => {
    return {
        newTextValue: (e) => {dispatch({type: "ON_CHANGE", text: e.target.value})}
    }
}

export const NodeListContainer = connect(
    mapStateToProps,
    mapDispatchToProps
    )(NodeList)

上面的NodeList导入标记有错误消息

ERROR in ./src/containers/NodeListContainer.ts
(4,10): error TS2305: Module '"MyProject/src/components/NodeList"' has no exported member 'Nodelist'.

任何人都可以提供有关此处可能发生的事情的任何见解吗?

4 个答案:

答案 0 :(得分:18)

如果您解决了错误,您的代码应该有效。

而不是

[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:viewController animated:YES completion:nil];

你应该写:

import { Nodelist } from "../components/NodeList"

答案 1 :(得分:0)

要检查的另一件事是模棱两可/类似的文件名。

如果您在同一个程序包中有两个文件,它们的名称仅以扩展名不同,那么也会发生这种情况。例如,如果您有

folder
      foo.tsx
      foo.ts

执行以下导入时:

import { Something } from "./foo";

它仅适用于其中一个文件中的项目。

在这种情况下,解决方案是重命名文件之一以消除歧义。这样导入就可以了。

答案 2 :(得分:0)

如果有人仍然遇到此问题,我发现我只是从文件中导出了一项,所以进行了更改

export default function App() {
   ...
};

export function App() {
   ...
}

似乎可以解决问题!

答案 3 :(得分:-1)

避免在类似的项目范围/文件夹中使用两个不同的文件扩展名,例如“ js”和“ txs”,否则将导致诸如此类的类型错误。