【发布时间】:2022-01-18 16:47:23
【问题描述】:
在组成一个可观察的流时,从映射函数返回一个元组被编译器推断为一个联合而不是一个元组。
例如:
import { Component } from '@angular/core';
import { from } from 'rxjs';
import { map, tap } from 'rxjs/operators';
export class MyType {
constructor(private name: string) {}
}
@Component({
selector: 'my-app',
template: ''
})
export class AppComponent {
observable$ = from([new MyType('obj1'), new MyType('obj2')]).pipe(
map((value, index) => [value, index]),
tap(([value, index]) => console.log(value, index))
).subscribe();
}
查看stackblitz,如果您将鼠标悬停在tap 的函数参数中的value 或index,当它应该理解value: MyType 和@987654328 时,它们都会被推断为number | MyType @。
如果我通过填写泛型来注释地图:map<MyType, [MyType, number]>(...,那么输入是正确的。
这是预期的行为吗? typescript 不应该在不必显式传递类型的情况下理解该元组吗?
我在本地使用 rxjs @ 6.4.0 和 typescript @ 3.8.3,但是 stackblitz 有更新的版本并且仍然存在这种行为。
【问题讨论】:
标签: angular typescript generics types rxjs