Reactjs 类型“undefined”必须具有返回迭代器的“[Symbol.iterator]”方法
我试图将我的reducer从JS转换为typescript,但我遇到了一个奇怪的错误,我一直无法解决。错误源于在reducer[…state.messages]中使用省略号进行数组解构。基本上,守则如下: 减速器: 类型: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
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]的周围代码/函数/类吗。