使用推断来获取盒装的Observable值

问题描述 投票:0回答:1

我创建了一个pipe,可以将任何源转换为Observable,如下:

// If T is like an Observable it infers the inner value, otherwise it returns T
type Unobservable<T> = T extends Observable<infer R> ? R : T;

@Pipe({
  name: 'toObservable'
})
export class ToObservablePipe implements PipeTransform {
  transform<T>(value: T): Observable<Unobservable<T>> {
    return isObservable(value) ? value : just(value);
  }
}

该功能本身有效,但是我面临着返回类型的问题。当前它显示以下错误:

Type'(T&Observable)| “可观察”不能分配给“可观察>”类型。类型“ T&Observable”不可分配给类型“ Observable>”。无法将类型“未知”分配给类型“不可观察”。

就上下文而言,管道的使用可以像这样:

<h4>Array source</h4>

<pre>{{ array | toObservable | async | json }}</pre>

如何使编译器“快乐”? :)

DEMO

angular typescript angular-pipe
1个回答
0
投票

您可以使用重载作为@angular/AsyncPipe


0
投票

您可以通过这种方式获得相同的结果,而无需使用推断。


-1
投票
import { Pipe, PipeTransform } from "@angular/core";
import { isObservable, Observable, of as just } from "rxjs";

type Unobservable<T> = T extends Observable<infer R> ? R : T;
type ObservableOrAny<T> = Observable<T> | T;

@Pipe({
  name: "toObservable"
})
export class ToObservablePipe implements PipeTransform {
  transform<T>(value: ObservableOrAny<T>): Observable<Unobservable<ObservableOrAny<T>>> {
    return isObservable(value) ? value : just(value);
  }
}

-1
投票
Observable<Unobservable<any>>
© www.soinside.com 2019 - 2024. All rights reserved.