“订阅”类型缺少“订阅”类型的以下属性:_parentOrParents、_subscriptions

Posted

技术标签:

【中文标题】“订阅”类型缺少“订阅”类型的以下属性:_parentOrParents、_subscriptions【英文标题】:Type 'Subscription' is missing the following properties from type 'Subscription': _parentOrParents, _subscriptions 【发布时间】:2022-01-03 18:25:33 【问题描述】:

我的 Angular ts 文件出现上述错误。但无法理解修复。谁来帮帮我

ts 文件:

import  Component, OnInit, OnDestroy  from '@angular/core';
import  ScullyRoute, ScullyRoutesService  from '@scullyio/ng-lib';
import  Subscription  from 'rxjs';

@Component(
  selector: 'app-articles',
  templateUrl: './articles.component.html',
  styleUrls: ['./articles.component.scss']
)
export class ArticlesComponent implements OnInit, OnDestroy 

  posts: ScullyRoute[] = [];
  private routeSub: Subscription | undefined;

  constructor(private scullyService: ScullyRoutesService)  

  ngOnInit(): void 
    this.routeSub = this.scullyService.available$.subscribe(posts => 
      this.posts = posts.filter(post => post.title);
    );
  

  ngOnDestroy(): void 
    this.routeSub?.unsubscribe();
  


【问题讨论】:

你能添加服务的定义,特别是available$。那是 Observable、BehaviorSubject、Subject...? 尝试用private routeSub!: Subscription;替换private routeSub: Subscription | undefined; @Edward: scully.io/docs/Reference/ngLib/scully-routes-service 听起来你有多个版本的 RxJS。 据我了解,rxjs 7 与以前的版本相比有一些相当大的变化。我不认为 angular 12.x 支持 rxjs 7。here 上有一个线程。我知道 angular 13 确实支持它。如果您能够升级到 13,那将是最好的选择。如果您无法升级到 13,我建议将您的 scully 版本降级到支持 Angular 12 的版本。RXJS 是 Angular 的核心功能,因此在不支持它的 Angular 版本上盲目升级它会有风险 【参考方案1】:

也许 scully-route-service 使用了不同版本的 rxjs。作为一种解决方案,您可以使用 rxjs 管道运算符 takeUntil 和取消订阅的主题,而不是保存订阅的实例。示例代码下方:

onDestroy$: Subject<boolean> = new Subject();

ngOnInit() 
 this.scullyService.available$.pipe(takeUntil(this.destroy$)).subscribe(() => 
 //do stuff 
)
this.service.someSubscriber2.pipe(takeUntil(this.destroy$)).subscribe(() => 
 //do stuff 
)
this.service.someSubscriber3.pipe(takeUntil(this.destroy$)).subscribe(() => 
 //do stuff 
)


ngOnDestroy() 
  this.destroy$.next(true);
  this.destroy$.unsubscribe();

或者您可以通过升级到 Angular 13 来解决问题的核心,这将是最好的选择。如果您无法升级到 13,我建议将您的 scully 版本降级到支持 angular 12 的版本。

如果您不打算升级到 Angular 13,那么支持 rx 6 的 scully 的 LTS 版本是 1.1.4: https://registry.npmmirror.com/@scullyio/init/1.1.4?spm=a2c6h.24755359.0.0.60394d45aVQlxP&file=1.1.4

你可以通过运行npm install @scullyio/init@1.1.4来安装它

【讨论】:

以上是关于“订阅”类型缺少“订阅”类型的以下属性:_parentOrParents、_subscriptions的主要内容,如果未能解决你的问题,请参考以下文章

Angular 订阅 - 类型 'Subscription' 缺少来自类型 'ToDo[]' 的以下属性:length、pop、push、concat 和另外 26 个

无法读取未定义类型错误的属性“订阅”

从服务订阅数据时,类型 void 上不存在错误属性订阅?

“对象”类型上不存在属性“”。可观察订阅

联合类型导致 graphql 订阅

如何在订阅级别获取不同资源类型的 Azure 资源计数限制和配额?