必须拥有一个返回迭代器的'[Symbol.iterator]()'方法。

5
我遇到了这个错误:
error TS2488: Type 'Usuario' must have a '[Symbol.iterator]()' method
that returns an iterator.

我的代码:

usuarios.reducers.ts

export interface UsuarioState {
    users: Usuario[];
    loaded: boolean;
    loading: boolean;
    error: any;
}

const initState: UsuarioState = {
    users: [],
    loaded: false,
    loading: false,
    error: null
}

export function usuariosReducer(state = initState, action: fromUsuariosActions.usuariosAcciones): UsuarioState {

    switch (action.type) {

        case fromUsuariosActions.CARGAR_USUARIOS: 
            return {
                ...state,
                loading: true
            }

        case fromUsuariosActions.CARGAR_USUARIOS_SUCCESS:
            return {
                ...state,
                loading: false,
                loaded: true,
                users:[...action.usuarios]
            }

截图:在此输入图片描述

我在我的tsconfig.json文件中添加了"es5", "dom.iterable",但仍然无法正常工作,你能解释一下问题出在哪里吗?

usuarios.actions.ts

import { Action } from '@ngrx/store';
import { Usuario } from '../../models/usuario.model';

export const CARGAR_USUARIOS = 'CARGAR_USUARIO'
export const CARGAR_USUARIOS_FAIL = 'CARGAR_USUARIO_FAIL'
export const CARGAR_USUARIOS_SUCCESS = 'CARGAR_USUARIO_SUCCESS'

export class CargarUsuarios implements Action {
    readonly type = CARGAR_USUARIOS;
}

export class CargarUsuariosFail implements Action {
    readonly type = CARGAR_USUARIOS_FAIL;

    constructor(public payload: any) {}
}

export class CargarUsuariosSuccess implements Action {
    readonly type = CARGAR_USUARIOS_SUCCESS;

    constructor(public usuarios: Usuario) {}
}

export type usuariosAcciones = CargarUsuarios |
                               CargarUsuariosFail |
                               CargarUsuariosSuccess

usuario.model.ts

export class Usuario {
    constructor(
        public id: number, 
        public first_name: string, 
        public last: string,
        public avatar: string,
    ) {
    }
}

usuariosAcciones 的类型定义为: export type usuariosAcciones = CargarUsuarios | CargarUsuariosFail | CargarUsuariosSuccess - Andres
请分享 fromUsuariosActions.usuariosAcciones 的定义。 - vighnesh153
你可以使用 { ...action.usuarios } 来代替,如果你想要多个用户,你可以在数组中这样做:[ { ...action.usuarios } ] - vighnesh153
1
是的.. 尝试 [ { ...action.usuarios } ]。该错误发生是因为 users 属性期望一个 Usuario 数组。 - vighnesh153
[ { ...action.usuarios } ] 已经生效!谢谢Vighnesh。 - Andres
显示剩余6条评论
1个回答

4
action.usuario 是一个对象,将一个对象展开到一个Array中,在 spread 操作符的规范中并没有定义。此外,users 属性需要一个Usuario 对象数组。因此,首先需要将该对象展开到另一个object中,然后将其作为元素添加到数组中。
...
    case fromUsuariosActions.CARGAR_USUARIOS_SUCCESS:
        return {
            ...state,
            loading: false,
            loaded: true,
            users:[{...action.usuarios}]
        }
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接