Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法_Reactjs_Typescript_React Redux - Fatal编程技术网

Reactjs 类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法

Reactjs 类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法,reactjs,typescript,react-redux,Reactjs,Typescript,React Redux,我试图将我的reducer从JS转换为typescript,但我遇到了一个奇怪的错误,我一直无法解决。错误源于在reducer[…state.messages]中使用省略号进行数组解构。基本上,守则如下: 减速器: 类型: export interface HomeState { user?: User; messages?: Message[]; } export interface Test1 { type: typeof constants.Test1 payload: User } e

我试图将我的reducer从JS转换为typescript,但我遇到了一个奇怪的错误,我一直无法解决。错误源于在reducer[…state.messages]中使用省略号进行数组解构。基本上,守则如下: 减速器:

类型:

export interface HomeState {
user?: User;
messages?: Message[];
}
export interface Test1 {
type: typeof constants.Test1
payload: User
}

export interface Test2 {
type: typeof constants.Test2
payload: Message
}
以及tsconfig.js:

  "compilerOptions": {
/* Basic Options */
"target": "es6",                          
"watch": false,
"module": "commonjs",
 "lib":  [ "dom", "es6", "es2015" , "dom.iterable"],
// "allowJs": true,
// "checkJs": true,
"jsx": "react",
// "declaration": true,
"sourceMap": true,
// "outFile": "./",
"outDir": "./lib",

"strict": true

},
"include": ["./src/"]
}
我尝试过不同的LIB,如es2015和es5,但仍然有一个错误

[...state.messages]
任何帮助都将不胜感激

由于消息在HomeState中是一个可选属性,因此可以不定义消息,在这种情况下,在数组分解过程中会出现运行时错误

为了防止运行时错误,TS抛出编译时错误

解决此问题的最简单方法是检查state.messages是否为空,并使用空数组初始化。例如:

 case constants.Test2:
   let messages: Message[] = state.mesaage || [];
   return {...state, messages:[ ...messages, action.payload ]};
由于消息在HomeState中是一个可选属性,因此可以不定义消息,在这种情况下,在数组解构中会出现运行时错误

为了防止运行时错误,TS抛出编译时错误

解决此问题的最简单方法是检查state.messages是否为空,并使用空数组初始化。例如:

 case constants.Test2:
   let messages: Message[] = state.mesaage || [];
   return {...state, messages:[ ...messages, action.payload ]};

当您将鼠标悬停在state.messages上时,会显示什么类型的消息?这也是编译错误还是运行时错误?错误:34,39 TS2488:类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法。不,我刚进入webstorm,所以需要编译时间。我还没有运行它。你能在帖子的第一个代码段中发布[…state.messages]的周围代码/函数/类吗?它是减缩器的一部分。当你悬停在state.messages上时,它显示什么类型?这也是编译错误还是运行时错误?错误:34,39 TS2488:类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法。不,我刚进入webstorm,所以需要编译时间。我还没有运行它。你能在文章的第一个代码片段中发布[…state.messages]的周围代码/函数/类吗。