首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJ Observable<string>对Observable<string[]>

RxJ Observable<string>对Observable<string[]>
EN

Stack Overflow用户
提问于 2017-06-05 10:25:52
回答 3查看 10.8K关注 0票数 1

虽然在我的一生中,我在许多不同的情况下都使用了可观察的模式,但我很难理解RxJS的可观测性。下面是一些代码:

代码语言:javascript
复制
    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()返回一个数据数组--通常是映射到类型记录对象的对象,但在本例中它们只是字符串:

代码语言:javascript
复制
[  
    "test1",
    "test2",
    "test3",
    "test4"
]

当我订阅test1test2属性(例如在角度视图模板中,或者在使用.subscribe()的代码中手动订阅)时,可观察到的泛型类型似乎对框架没有任何影响。尽管可观测到的“数据”是不同的(一个是数组,另一个是可观察字符串的数组),但显示的项目完全相同。

有人能解释Observable<string>Observable<string[]>之间的区别,并给我一个如何使用它们的例子吗?

EN

回答 3

Stack Overflow用户

发布于 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是字符串,它将变成字符串。

票数 1
EN

Stack Overflow用户

发布于 2017-06-05 10:58:51

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

不管你分配给一个可观察的人什么类型,都不会改变可观察到的人实际上会发出什么。这只取决于如何构造可观测的。如果执行observable.map(r => r.json()),而r.json返回字符串,则结果可观察到的将发出字符串,如果返回字符串数组,则可观察到的结果将发出字符串数组。

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

票数 0
EN

Stack Overflow用户

发布于 2020-09-15 11:19:21

正如其他人所解释的那样,类型参数(您在< >之间放置的参数)向类型记录指明了这个可观察到的数据的类型。

如前所述,在运行时,这没有区别,因为类型记录在构建时运行类型检查。

尽管如此,您看到的test1test2之间并没有什么不同,因为.json()返回any (请参阅这里),所以如果您将其转换为stringstring[],类型记录就不会抱怨。另一方面,如果您尝试对您输入为replace的内容使用字符串方法(例如,string[] ),则会感到不满。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44366881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档