首页 > 解决方案 > 必须有一个返回迭代器的“[Symbol.iterator]()”方法

问题描述

我遇到了这个错误:

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]
            }

截屏:在此处输入图像描述

我已经添加"es5", "dom.iterable"到我的tsconfig.json文件中,但仍然无法正常工作,你能解释一下有什么问题吗?

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,
    ) {
    }
}

标签: angulartypescript

解决方案


action.usuariois an并且将Object对象扩展为 anArray在运算符的规范中未定义spread。此外,该users属性需要一个对象数组Usuario。因此,首先,您需要spread将对象放入另一个对象object,然后将其作为元素添加到数组中。

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

推荐阅读