我正在研究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'.
任何人都可以提供有关此处可能发生的事情的任何见解吗?
答案 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”,否则将导致诸如此类的类型错误。