【发布时间】:2017-06-05 10:25:52
【问题描述】:
我很难理解 RxJS Observables,尽管我一生中在许多不同的情况下都使用过 observable 模式。这是一些代码:
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 中的“数据”不同(一个是数组,另一个是 observable 字符串数组),项目的显示完全相同。
谁能解释Observable<string> 和Observable<string[]> 之间的区别,并举例说明应该如何使用它们?
【问题讨论】:
-
如果事件给你一个字符串,你应该使用
,如果事件返回一个字符串数组,你应该使用 。在这种情况下,您的 observable 似乎正在返回一个字符串数组。重要的是响应包含什么。 :) -
这就是我的想法。但是,我所有的 observable 都被定义为 Observable
(而不是 Observable ,但是我的所有数据都是从后端作为数组返回的;我没有收到 TS 警告,并且任何订阅代码都没有似乎不在乎我如何定义它。 -
您定义的类型仅在编译时,在运行时所有类型信息都会丢失。此外,服务器返回的应该是你的 observable 的类型,你在那里写的类型是用来描述的,他们不强制要求它。我认为这里的问题是您只是输入了错误的 observables。
-
我本以为运行时会接受它 - 我的 json 数组无法转换为 Observable
-
没有使用 typescript 进行运行时类型检查,如果这是您要查找的内容,则说明您使用了错误的语言。
标签: angular typescript rxjs observable