ngrx - 错误 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));
});
}
解决方案
您的userService
getUsers 方法可能没有设置正确的返回类型(应该是Observable<User>
),因此订阅假定响应是 unknown Object ,然后您尝试将其作为 type 的参数传递User
。
这应该解决它:
ngOnInit() {
this.userService.getUsers().subscribe((data: User) => {
this.store.dispatch(loaduser(data));
});
}
注意data
参数上的类型。但是您还应该确保服务的类型也正确。
推荐阅读
- google-app-engine - 每个谷歌应用引擎支持的自定义域的最大数量?
- split - Excel:将一行拆分并重新排列为 3 行
- django - 为什么我可以从 localhost (vscode) 访问 Django 开发服务器?
- android-studio - Studio BumbleBee 用于 Compose 预览的“渲染问题”
- logging - Android中是否有关于图片制作的日志信息?如果有,保存多长时间?
- kubernetes - Kubernetes 上的 Socket.io 入口控制器(无法建立连接)
- python - send_task() 上的 Celery + Redis 信息
- operating-system - 有没有办法在 LG 或 Blaupunkt 电视上安装我的 .ipk 文件并且我可以反编译它吗?
- java - Java BigDecimal 舍入,而数字中有无意义的 0
- javascript - Puppeteer:TimeoutError:在 Timeout.setTimeout (/home/site/wwwroot/node_modules/puppeteer/lib/helper.js) 等待事件时超时