如何在保留其类型定义的同时在Angular中清空组件属性?

时间:2018-08-01 20:19:37

标签: angular typescript variables types undefined

比方说,组件具有以下属性:

private foo$: Observable<Array<SomeType>>;
private bar: SomeOtherType;

后来他们获得了价值...

this.foo$ = someSubject.pipe(switchMap(...whatever...
this.bar = new SomeOtherType(...whatever...

出于某种原因,我有时想清空这两个属性,通过清空我的意思是删除它们的值,因此将它们设置回它们获得值之前的状态。

让他们undefined是不可行的。如果这样做,他们将丢失其“类型信息”。我希望TypeScript和Angular知道它们仍在处理Observable和SomeOtherType的对象。

我有什么选择?

2 个答案:

答案 0 :(得分:1)

为了“将变量设置回获得值之前的状态”,请将它们设置为undefined

this.foo$ = undefined;
this.bar = undefined;

在您进行测试的the stackblitz中,可观察的heroes$async管道一起使用:

<li *ngFor="let hero of heroes$ | async" >

如果然后将heroes$设置为undefined,该列表将从视图中消失,并且Observable停止工作。销毁组件时的async管道unsubscribes automatically;当Observable变量变为undefined时,它似乎也做同样的事情。

除了async管道使用Observable的情况之外,将变量设置为undefined不会停止Observable的工作,如this stackblitz所示。

答案 1 :(得分:0)

我怀疑您可以将类型设置为任何类型,而不是未定义的类型。

例如, 私有foo $:Observable>; 私人酒吧:SomeOtherType;