首页 > 解决方案 > 错误 TS2345:“对象”类型的参数不可分配给“用户”类型的参数。(NgRx)

问题描述

我的项目中有一个错误,我找不到问题出在哪里。我在我的 NGRX 开发工具中看到该操作已触发并使用新数据更新状态,但我在控制台中收到此错误,这让我很困扰。

这是我的状态:

export interface User {
  userId: number;
  id: number;
  title: string;
  completed: boolean;
}

行动:

import { createAction, props } from '@ngrx/store';
import { User } from '../models/user.model';

export const loaduser = createAction(
  '[USER] Load',
  props<User>()
);

减速器:

import { User } from '../models/user.model';
import * as UserAction from '../actions/user.actions';
import { Action, createReducer, on } from '@ngrx/store';

export const initialState: User = null;

const commentReducer = createReducer(
  initialState,
  on(UserAction.loaduser, (state, payload) =>  payload)
);

export function reducer(state: User, action: Action) {
  return commentReducer(state, action);
}

带有 api 的组件:

  ngOnInit() {
    this.userService.getUsers().subscribe((data) => {
      this.store.dispatch(loaduser(data));
    });
  }

标签: ngrx

解决方案


您的userServicegetUsers 方法可能没有设置正确的返回类型(应该是Observable<User>),因此订阅假定响应是 unknown Object ,然后您尝试将其作为 type 的参数传递User

这应该解决它:

  ngOnInit() {
    this.userService.getUsers().subscribe((data: User) => {
      this.store.dispatch(loaduser(data));
    });
  }

注意data参数上的类型。但是您还应该确保服务的类型也正确。


推荐阅读