实现 ngRx 时出错“类型 'Actions<Action>' 上不存在属性 'pipe'。”

Posted

技术标签:

【中文标题】实现 ngRx 时出错“类型 \'Actions<Action>\' 上不存在属性 \'pipe\'。”【英文标题】:Error while implementing ngRx "Property 'pipe' does not exist on type 'Actions<Action>'."实现 ngRx 时出错“类型 'Actions<Action>' 上不存在属性 'pipe'。” 【发布时间】:2020-05-22 04:06:08 【问题描述】:

我正在使用以下版本:

@ngrx/effects@8.6.0 @ngrx/store@8.6.0

@ngrx/core@1.2.0

@angular/cli@8.3.25

进口:

import  BookService  from './../services/book.service';
import Actions, Effect, ofType from '@ngrx/effects';
import mergeMap, map from 'rxjs/operators';
import Action from '@ngrx/store';
import * as types from './action.types';
import * as bookActions from './book.actions';

构造函数:

constructor(private service: BookService,
        private actions$: Actions)

@Effect() loadBooks$: Observable<Action> = this.actions$.pipe(
        ofType<bookActions.loadBooksAction>(types.LOAD_BOOKS),
        mergeMap(() => 
            this.service.getAllBooks().pipe(map(books => 
                new bookActions.loadBooksSuccessAction(books)))
        )
    )

错误:“操作”类型上不存在属性“管道”。

【问题讨论】:

请分享您的导入,我认为有错误。 好的,请也显示你的构造函数。 在问题中更新 【参考方案1】:

问题是依赖@ngrx/core@1.2.0。这是 ngrx 的旧版本和已弃用的软件包。

你必须删除它。

【讨论】:

删除它并安装最新的? 但是最新版本本身是1.2.0 npmjs.com/package/@ngrx/core 不只是删除它。最新版本的ngrx 只需要storeeffects 检查您的其他依赖项到package.json。备份 node_modules 文件夹和 yarn.lock 并尝试使用 yarn install 重新安装所有依赖项。 我没用yarn包管理器有必要用吗?如果我是愚蠢的,我只是角度方面的新手,请原谅我【参考方案2】:

首先,ngrx v8 使用新的syntax,所以你可能想用你的代码检查它

来自文档的示例

search$ = createEffect(() => (
  // assign default values
  debounce = 300,
  scheduler = asyncScheduler
 = ) =>
  this.actions$.pipe(
    ofType(BookActions.search),
    debounceTime(debounce, scheduler),
    ...
  )
);

其次在你的 package.json 中删除 package-lock.json 和 @ngrx/core 包(不需要这个)

然后像这样更新 package.json

"@ngrx/effects": "^8.6.0",
"@ngrx/store": "^8.6.0",
"@ngrx/store-devtools": "^8.6.0",

然后运行

npm cache clean --force
npm i 

如果问题仍然存在,您可以删除 node_modules 文件夹并运行npm i

【讨论】:

以上是关于实现 ngRx 时出错“类型 'Actions<Action>' 上不存在属性 'pipe'。”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Ngrx 读取未定义的属性“firebaseApp”

安装@ngrx/store 时如何清除错误?

来自 ngrx 的关于运行时检查的警告

升级@ngrx/Store 时,类型“操作”上不存在属性“有效负载”

@ngrx 在递归使用智能组件时从存储中选择特定的状态片

在 Angular 中使用 ngrx 进行状态管理时,控制台记录状态数据