Type ‘Observable’ 错误的根源与修复方法
发布时间 - 2026-01-28 00:00:00 点击率:次在使用 ngrx 时,若 selector 函数体中遗漏 return 语句,将导致其隐式返回 void,从而使得 select() 管道推导出 observable
该错误本质是 TypeScript 类型推导问题,而非 NgRx 运行时异常。观察你提供的 selector 代码:
export const commentsSelector = createSelector(selectFeature, (state) => {
state.comments; // ❌ 无 return,函数返回类型为 void
});JavaScript 中,使用花括号 {} 的箭头函数不会自动返回值,必须显式写 return;否则函数体执行完毕后默认返回 undefined(其类型为 void)。因此 createSelector 推导出的输出类型为 Observable
✅ 正确写法有两种:
方式一:显式 return(推荐,语义清晰)
export const commentsSelector = createSelector(selectFeature, (state) => { return state.comments; // ✅ 显式返回 IComment[] });
方式二:隐式返回(简洁,适用于单表达式)
export const commentsSelector = createSelector(selectFeature, (state) => state.comments // ✅ 无花括号,自动返回表达式结果 );
同样,isLoadingSelector 和 errorSelector 也存在相同问题,需同步修复:
export const isLoadingSelector = createSelector(selectFeature, (state) => state.isLoading); export const errorSelector = createSelector(selectFeature, (state) => state.error);
⚠️ 注意事项:
- 所有 selector 的返回值必须严格匹配其消费端(如 select())所期望的数据类型;
- 使用 ng build --prod 或开启严格类型检查("strict": true)时,此类错误会立即暴露;
- 建议在 selector 中添加类型注解以增强可读性与安全性(可选但强烈推荐):
export const commentsSelector = createSelector( selectFeature, (state): IComment[] => state.comments );
修复后,this.comments$ = this.store.pipe(select(commentsSelector)) 将正确推导为 Observable
# javascript
# java
# typescript
# 数据类型
# select
# void
# undefined
# this
# 返回值
# 隐式
# 适用于
# 此类
# 可选
# 有两种
# 而非
# 强烈推荐
# 无花
# 不兼容
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
文字头像制作网站推荐软件,醒图能自动配文字吗?
奇安信“盘古石”团队突破 iOS 26.1 提权
JavaScript数据类型有哪些_如何准确判断一个变量的类型
java ZXing生成二维码及条码实例分享
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何基于PHP生成高效IDC网络公司建站源码?
如何快速生成凡客建站的专业级图册?
JS经典正则表达式笔试题汇总
高防服务器租用如何选择配置与防御等级?
用yum安装MySQLdb模块的步骤方法
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何获取上海专业网站定制建站电话?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
浅述节点的创建及常见功能的实现
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel如何为API生成Swagger或OpenAPI文档
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Bootstrap CSS布局之列表
如何快速生成专业多端适配建站电话?
Laravel如何使用Eloquent进行子查询
如何用腾讯建站主机快速创建免费网站?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何用美橙互联一键搭建多站合一网站?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
独立制作一个网站多少钱,建立网站需要花多少钱?
Linux安全能力提升路径_长期防护思维说明【指导】
如何快速生成ASP一键建站模板并优化安全性?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
做企业网站制作流程,企业网站制作基本流程有哪些?
Android okhttputils现在进度显示实例代码
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】


