📌  相关文章
📜  “可观察”类型上不存在属性“取消订阅”<Object> &#39; - TypeScript (1)

📅  最后修改于: 2023-12-03 15:35:51.390000             🧑  作者: Mango

TypeScript 编译错误:'“可观察”类型上不存在属性“取消订阅”'

当在 TypeScript 中使用可观察对象进行订阅时,可能会出现下面的编译错误:

'“可观察”类型上不存在属性“取消订阅”<Object>'

这通常是因为你尝试在订阅一个可观察对象之后取消订阅该对象,但是该对象并没有实现 unsubscribe 方法。

在 RxJS 中,订阅时返回的对象实际上是一个 Subscription 对象,而不是可观察对象本身。因此,如果要取消订阅,则需要调用 unsubscribe 方法。

下面是一个示例:

import { Observable, Subscription } from 'rxjs';

const observable = new Observable(subscriber => {
  const timerId = setInterval(() => {
    subscriber.next('Hello World!');
  }, 1000);

  return new Subscription(() => {
    clearInterval(timerId);
    console.log('Unsubscribed!');
  });
});

const subscription = observable.subscribe(console.log);

setTimeout(() => {
  subscription.unsubscribe();
}, 5000);

在这个示例中,我们创建了一个可观察对象 observable,它每隔一秒钟会向订阅者发送一条消息。在创建可观察对象时,我们返回了一个 Subscription 对象,它会在取消订阅时释放定时器资源,并输出一条日志以确认该对象已经被取消订阅。最后,在订阅可观察对象后,我们设置了一个 5 秒钟的定时器,并在其中调用了 unsubscribe 方法来取消订阅。

如果你仍然遇到了 '“可观察”类型上不存在属性“取消订阅”' 的编译错误,那么可能是因为在订阅时返回的对象类型不正确。确保返回的对象是 Subscription 类型即可。