虽然我在整个人生中使用了许多不同情况下的可观察模式,但我很难在RxJS Observables里找到自己的头。下面是一些代码:RxJs Observable <string> vs Observable <string[]>
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内部的'data'不同(一个是数组,另一个是可观察字符串的数组),项目显示完全相同。
任何人都可以解释Observable<string>
和Observable<string[]>
之间的区别,并举例说明他们应如何使用?
如果事件返回一个字符串数组,则应该使用;如果事件返回一个字符串数组,则返回。在这种情况下,您的observable似乎正在返回一个字符串数组。重要的是响应包含的内容。 :) –
toskv
这是我的想法。然而,我所有的观测数据被定义为Observable(而不是Observable ,但是我所有的数据都是作为数组从后端返回的;我没有收到TS警告,并且任何订阅代码似乎都不关心我定义它 –
Spikeh
你定义的类型只在编译时,运行时所有的类型信息都会丢失,服务器返回的结果应该是你的observable的类型,你写的类型在那里描述,他们没有强制它。我认为这里的问题是,你只是输入你的观察错误 – toskv