1. ホーム
  2. angular

[解決済み] イテレータを返す '[Symbol.iterator]()' メソッドを持つ必要があります。

2022-03-10 05:54:11

質問

このようなエラーが発生します。

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

解決方法は?

その action.usuarioObject にオブジェクトを展開し Array の仕様には定義されていません。 spread 演算子を使用します。また users プロパティは Usuario オブジェクトを生成します。そこで、まず spread オブジェクトを別の object を作成し、それを配列の要素として追加します。

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