You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ngrx类型错误:Observable<void>无法赋值给Observable<IComment[]>

问题分析与解决

错误原因

你遇到的类型不匹配错误,根源在选择器代码的投影函数中没有返回值。每个createSelector的第二个参数(投影函数)里,你只是访问了state.isLoading/state.comments/state.error,但没有返回它们,函数默认返回void,最终导致store.pipe(select(...))返回的是Observable<void>,和你定义的Observable<boolean>/Observable<IComment[]>类型不兼容。

修复方案

修改选择器代码,确保每个投影函数返回对应的值,有两种简洁写法:

写法1:显式返回

import { createSelector, select } from '@ngrx/store';
import { AppStateInterface } from 'src/app/types/appState.interface';

export const selectFeature = (state: AppStateInterface) => state.comments;

export const isLoadingSelector = createSelector(selectFeature, (state) => {
  return state.isLoading;
});

export const commentsSelector = createSelector(selectFeature, (state) => {
  return state.comments;
});

export const errorSelector = createSelector(selectFeature, (state) => {
  return state.error;
});

写法2:箭头函数简写(更推荐)

import { createSelector, select } from '@ngrx/store';
import { AppStateInterface } from 'src/app/types/appState.interface';

export const selectFeature = (state: AppStateInterface) => state.comments;

export const isLoadingSelector = createSelector(selectFeature, (state) => state.isLoading);

export const commentsSelector = createSelector(selectFeature, (state) => state.comments);

export const errorSelector = createSelector(selectFeature, (state) => state.error);

验证修改

修改后,选择器会正确返回对应类型的值,store.pipe(select(...))生成的Observable类型就会和组件中定义的isLoading$、comments$类型匹配,错误即可消除。

内容的提问来源于stack exchange,提问作者Kristian Lalov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:37:31