【问题标题】:must have a '[Symbol.iterator]()' method that returns an iterator必须有一个返回迭代器的“[Symbol.iterator]()”方法
【发布时间】:2020-01-10 06:20:36
【问题描述】:

我遇到了这个错误:

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 的类型定义吗?看起来action.usuarios 不能保证是一个数组。
  • usuariosAcciones 的类型定义为:export type usuariosAcciones = CargarUsuarios | CargarUsuarios 失败 | CargarUsuariosSuccess
  • 请分享fromUsuariosActions.usuariosAcciones的定义。
  • 你的Usuario 模型是什么样的?
  • 是的.. 试试[ { ...action.usuarios } ]。发生该错误是因为 users 属性需要 Usuario 的数组。

标签: angular typescript


【解决方案1】:

action.usuario 是一个Object,并且在spread 运算符的规范中没有定义将对象传播到Array 中。此外,users 属性需要一个 Usuario 对象数组。因此,首先,您需要将 spread 对象添加到另一个 object 中,然后将其作为元素添加到数组中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多