Typescript поддерживает дискриминируемых союзов . Как распространить ту же концепцию с Rxjs на оператор filter
в приведенном ниже примере?
interface Square {
kind: 'square';
width: number;
}
interface Circle {
kind: 'circle';
radius: number;
}
interface Center {
kind: 'center';
}
type Shape = Square | Circle | Center;
const obs$: Observable<Shape> = of<Shape>({ kind: 'square', width: 10 });
// Expected type: Observable<Square>
// Actual type: Observable<Shape>
const newObs$ = obs$.pipe(
filter((x) => x.kind === 'square')
);
Я выше фрагмента кода, я хотел бы увидеть newObs $, чтобы его тип выводилсякак: Observable<Square>
.Но, очевидно, TypeScript
этого не делает.
Как этого добиться?Достигаю ли я границ вывода типа TypeScript?
Я ищу это, поскольку оно кажется очень полезным в Redux + Redux-Observable
кодовой базе.