我有一个react组件,在该react组件中,我使用blueprint.js树函数根据从服务器返回的json对象来呈现树。我正在尝试修复一个类型问题,但我不确定它来自哪里……这是错误:
Type 'ITreeNode<{}>[] | undefined' is not assignable to type 'ITreeNode<{}>[]'.
Type 'undefined' is not assignable to type 'ITreeNode<{}>[]'.ts(2322)
HelpTree.tsx(11, 5): The expected type comes from property 'nodes' which is declared here on type 'IntrinsicAttributes & IntrinsicClassAttributes<HelpTree> & Readonly<State> & Readonly<{ children?: ReactNode; }>'
我不确定为什么会出现这个错误,也不知道如何修复它。
这是源代码。我使用bluepring中的树,并在动态构建后分配ITreeNode。
export const HelpDialog: React.FC = () => {
const themeClass = useBehavior(mainStore.themeClass);
const isOpen = useBehavior(mainStore.isHelpDialogVisible);
const [files, setFiles] = useState([]);
const [folderLoading, setFolderLoading] = useState(false);
const InitialState: ITreeNode[] = [];
let currentNode: HelpDTO;
let parentFolder: any = {};
let majorFolder: any = {};
let majorFile: any = {};
useEffect(() => {
if (isOpen) {
fetchHelp();
}
}, [isOpen]);
const fetchHelp = () => {
helpApi.getHelpFiles().then((response) => {
if (response.status !== 200) return;
setFiles(response.data);
checkFileContent();
});
};
return (
<Dialog
className={classNames(themeClass, styles.helpDialog)}
title="Help"
icon="help"
isOpen={isOpen}
onOpened={fetchHelp}
onClose={closeDialogBox}
>
<div style={{ overflowY: "scroll" }}>
{folderLoading ? <HelpTree nodes={setNodes(files)} /> : <Spinner />}
</div>
</Dialog>
);
};
错误来自倒数第五行:
{folderLoading ? <HelpTree nodes={setNodes(files)} /> :
其中节点是十进制的:
这是声明树的位置:
interface Props {
nodes: ITreeNode[];
}
export interface State {
nodes: ITreeNode[];
}
// use Component so it re-renders everytime: `nodes` are not a primitive type
// and therefore aren't included in shallow prop comparison
export class HelpTree extends React.Component<State, Props> {
constructor(props: Props) {
super(props);
this.state = {
nodes: props.nodes
};
}
render() {
return (
<Tree
contents={this.state.nodes}
onNodeCollapse={this.handleNodeCollapse}
onNodeExpand={this.handleNodeExpand}
onNodeDoubleClick={this.handleNodeDoubleClick}
/>
);
}
}
发布于 2019-06-04 05:24:09
该错误告诉您,您的setNodes
函数可能返回"undefined"
而不是ITreeNode
。
您可以通过替换以下代码来更改声明树的类型:
interface Props {
nodes: ITreeNode[];
}
有了这个:
interface Props {
nodes: ITreeNode[] | undefined;
}
或者,您可以检查您的setNodes
以确保它永远不会返回"undefined"
https://stackoverflow.com/questions/56433497
复制相似问题