RxJs Observable <string> vs Observable <string []>

时间:2017-06-05 10:25:53

标签: angular typescript rxjs observable

我很难绕过RxJS Observables,虽然我已经在我生命中的许多不同情况下使用了可观察的模式。这是一些代码:

    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()返回一个数据数组 - 通常是将映射到typescript对象的对象,但在这种情况下它们只是字符串:

[  
    "test1",
    "test2",
    "test3",
    "test4"
]

当我订阅test1test2属性时(在角度视图模板中,或者使用.subscribe()代码手动编写代码),可观察的泛型类型不会似乎对框架有任何影响。这些项目显示完全相同,即使数据&#39;在observable内部是不同的(一个是数组,另一个是可观察字符串数组)。

任何人都可以解释Observable<string>Observable<string[]>之间的区别,并举例说明应该如何

使用?

3 个答案:

答案 0 :(得分:1)

Observable<string> 意味着你要为类型字符串

创建一个观察者

Observable<string[]> 表示您正在为字符串数组

创建一个观察者

因为你在打字稿中编码它只是一个类型检查,当你错误地尝试分配变量时它会帮助你的编译器。因为类型脚本被编译为javascript,它没有类型检查所以它与你用

分配值有关

例如: **在打字稿**

let k:int;

k=r.json().val;

在javascript编译的代码中等于

var k;

k=r.json().val;

所以如果r.json().val返回int,则k将变为int,k为字符串,它将变为字符串

答案 1 :(得分:0)

Observable<string>是可观察的类型,其中每个发射的值应该是一个字符串。 Observable<string[]>是observable的类型,其中每个发出的值应该是一个字符串数组。

分配给observable的任何类型都不会改变observable实际发出的内容。这仅取决于观察结构的构建方式。如果你observable.map(r => r.json())r.json返回一个字符串,结果observable将发出字符串,如果它返回一个字符串数组,结果observable将发出字符串数组。

说,如果r.json的类型签名如(r: Response): string[],那么Typescript应该抱怨test1的类型不兼容。

答案 2 :(得分:0)

正如其他人所解释的,type参数(放在< >之间的类型参数)指示打字稿此可观察对象发出的数据的类型。

同样,在运行时,这没有什么区别,因为typescript在构建时运行类型检查。

话虽这么说,test1test2之间没有区别,因为.json()返回anyrefer here),所以打字稿不能抱怨如果将其投射到stringstring[]。 另一方面,如果您尝试对键入为replace的内容使用字符串方法(例如string[]),则会抱怨。