作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个 Angular 项目中使用 RXJS 和 Typescript。我在我的代码中写了以下内容:
const sub = new Subject<never>();
我希望这一行意味着任何定义了“下一步”和“错误”方法的订阅者,如下所示,将永远不会调用“下一步”方法。如果有的话,只会调用“error”方法。
sub.subscribe(() => /*do something with 'next' value*/, error => /*do something with 'error' value*/)
但是,当我写下以下内容时:
sub.next();
我没有收到编译错误。
根据我的理解,Subject 泛型是主题返回的类型,所以 never 意味着我们永远不会调用 next 方法。
谁能解释一下为什么?这是错误、功能还是我的误解?
最佳答案
在您的 Subject 上指定类型参数确实限制了您在调用 .next()
时可以传递的值的类型,因此如果您尝试传递一个值:sub.next ('string value')
你会得到一个错误:
Argument of type 'string' is not assignable to parameter of type 'never'.(2345)
但是,Subject.next()
的value
参数是可选的(在 RxJS v6 中)。这意味着,允许在不传递参数的情况下调用 sub.next()
,因此您可以使用 T
类型的参数调用 Subject.next
或者根本没有争论。
我相信这种行为在 RxJS v7 中已经改变。 Interesting GitHub Issue
关于angular - RXJS 'never' 主题为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68662895/
我是一名优秀的程序员,十分优秀!