虽然在我的一生中,我在许多不同的情况下都使用了可观察的模式,但我很难理解RxJS的可观测性。下面是一些代码:
const observable: Observable<Response> = createdElswhere();
let test1: Observable<string>;
let test2: Observable<string[]>;
test1 = observable.map(r => r.json());
test2 = observable.map(r => r.json());Response.json()返回一个数据数组--通常是映射到类型记录对象的对象,但在本例中它们只是字符串:
[
"test1",
"test2",
"test3",
"test4"
]当我订阅test1或test2属性(例如在角度视图模板中,或者在使用.subscribe()的代码中手动订阅)时,可观察到的泛型类型似乎对框架没有任何影响。尽管可观测到的“数据”是不同的(一个是数组,另一个是可观察字符串的数组),但显示的项目完全相同。
有人能解释Observable<string>和Observable<string[]>之间的区别,并给我一个如何使用它们的例子吗?
发布于 2017-06-05 10:41:39
Observable<string>意味着您要为类型字符串创建一个观察者
Observable<string[]>意味着您要为字符串数组创建一个观察者。
由于您是在类型编码,它只是一个类型测试,这有助于您的编译器时,您将错误地尝试分配变量。因为类型脚本被编译成javascript,而javascript没有类型检查,所以重要的是您用什么来分配值
**打字本**
let k:int;
k=r.json().val;
javascript编译代码中的等于。
var k;
k=r.json().val;
因此,如果r.json().val返回int,那么k将变成int,k是字符串,它将变成字符串。
发布于 2017-06-05 10:58:51
Observable<string>是一种可观察的类型,其中每个发出的值都应该是一个字符串。Observable<string[]>是一种可观察的类型,其中每个发出的值都应该是一个字符串数组。
不管你分配给一个可观察的人什么类型,都不会改变可观察到的人实际上会发出什么。这只取决于如何构造可观测的。如果执行observable.map(r => r.json()),而r.json返回字符串,则结果可观察到的将发出字符串,如果返回字符串数组,则可观察到的结果将发出字符串数组。
他说,如果r.json有类似于(r: Response): string[]的类型签名,那么类型记录应该抱怨test1的类型不兼容。
发布于 2020-09-15 11:19:21
正如其他人所解释的那样,类型参数(您在< >之间放置的参数)向类型记录指明了这个可观察到的数据的类型。
如前所述,在运行时,这没有区别,因为类型记录在构建时运行类型检查。
尽管如此,您看到的test1和test2之间并没有什么不同,因为.json()返回any (请参阅这里),所以如果您将其转换为string或string[],类型记录就不会抱怨。另一方面,如果您尝试对您输入为replace的内容使用字符串方法(例如,string[] ),则会感到不满。
https://stackoverflow.com/questions/44366881
复制相似问题