javascript - 为什么我不能在 RxJs 6 中减少到不同的类型?
问题描述
下面的示例不能作为版本 5 中链式运算符的直接转换。它给出了 Typescript 编译器错误。
from([1, 2]).pipe(
reduce((acc, curr) => {
return acc + ' ';
}, '')
);
“MonoTypeOperatorFunction”类型的参数不能分配给“OperatorFunction”类型的参数。参数 'source' 和 'source' 的类型不兼容。类型“Observable”不可分配给类型“Observable”。类型“数字”不可分配给类型“字符串”。[2345]
解决方案
所以这是一个工作版本
from([1, 2])
.pipe(
reduce<number, string>(
(acc, curr) => {
return acc + ' ';
}, '')
).subscribe(x => {
console.log(x);
});
现在稍微解释一下,这里的问题来自这一行(来自rxjs源)并定义了函数签名(类型)
export function reduce<T>(accumulator: (acc: T, value: T, index: number) => T, seed?: T): MonoTypeOperatorFunction<T>;
因此,在您的情况下,因为您没有明确地违反类型,rxjs 认为 theacc
和 thevalue
来自同一类型(number
在您的情况下,因为您正在传递数字数组)
通过明确地拒绝函数参数的类型,我们正在解决这个问题,因为我们有点帮助 rxjs/ts 使用下面的适当函数签名(这样就不会抛出错误)
export function reduce<T, R>(accumulator: (acc: R, value: T, index: number) => R, seed?: R): OperatorFunction<T, R>;
如果我们必须总结一下,问题是 rxjs/ts 需要一些明确的分型帮助。
推荐阅读
- kotlin - 如何解决该错误?...在 Kotlin 反射中尚未完全支持
- typescript - 键入复杂的递归函数以在其内部使用而不会出现循环引用错误
- google-chrome - 如何使用批处理或 Powershell 将新人添加到 Google Chrome?
- node.js - nodemon:干净退出等待重新启动前的更改
- azure - 有人可以解释 MS Azure 中数据块中数据阶段的开始到结束的顺序吗
- javascript - 开玩笑| TypeError:window.URL.createObjectURL 不是函数
- javascript - 即使在嵌入白名单域后,aws quicksight 仪表板嵌入 url 也会在 5 分钟后过期
- angular - Angular,登录时更改 apiUrl
- react-native - 无法调整 RNCamera react-native-camera 的大小
- html - 如何使用 CMD/Powershell 同时创建多个 html/文本文件