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

如何修复(key:string)=>Observable类型参数无法分配给ObservableInput的类型报错

报错原因

mergeMap 操作符要求传入的回调函数必须返回符合 ObservableInput 类型的值(常见合法类型包括 Observable、Promise、数组等可迭代对象),触发报错的核心原因是回调函数的不同分支返回值类型不统一:

  • refresh() 和 saveChanges() 两个方法中至少有一个返回的是普通 PayloadType 类型值,而非 Observable 类型
  • 如果你使用的是 RxJS 6+ 版本,代码中用到的 empty() 已经废弃,返回的类型不符合当前 mergeMap 的泛型约束
修复步骤
  1. 统一所有分支返回值为 Observable 类型:如果 refresh() 或 saveChanges() 返回的是普通值,使用 of() 方法将其包装为 Observable
  2. 替换废弃的 empty() 为 RxJS 官方提供的 EMPTY 常量
  3. 若仍有类型报错,可给 mergeMap 显式声明泛型约束匹配返回值类型
修复后参考代码
import { EMPTY } from 'rxjs';
import { filter, mergeMap } from 'rxjs/operators';

return action$.pipe(
  filter(a => a.type === 'ACTION'),
  mergeMap(action => {
    hideLoadingMask();
    return askForMessageDialog({
      title: 'test',
      type: 'question',
      text: getLocalized('test'),
      buttons: [
        { key: 'cancel', caption: 'cancel'},
        { key: 'notSave', caption: 'notSave' },
        { key: 'save', caption: 'save' }
      ],
      primaryButtonKey: cancel
    }).pipe(
      // 可按需添加泛型约束:mergeMap<string, ObservableInput<any>>
      mergeMap((key) => {
        switch (key) {
          case notSave: {
            // 若refresh返回普通值则改为 return of(refresh());
            return refresh();
          }
          case save: {
            // 若saveChanges返回普通值则改为 return of(saveChanges());
            return saveChanges();
          }
          default: 
            return EMPTY;
        }
      })
    );
  })
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:45:01