RxJs Observable vs Observable
虽然我在整个人生中使用了许多不同情况下的可观察模式,但我很难在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<string>
meansthat您正在创建string类型
Observable<string[]>
一个观察者意味着你正在创建的字符串
的阵列中的观察者,因为你是在打字稿编码,它只是一个类型检测,这有助于你的编译器当你错误地尝试分配变量。因为类型的脚本被编译成JavaScript它可是没有类型检查所以无论dosent什么你
例如赋值: **在打字稿**
let k:int;
k=r.json().val;
在javascript编译的代码等于
var k;
k=r.json().val;
所以如果r.json().val
返回整数,那么k将成为int和k为弦,它就会成为串
Observable<string>
是其中每个发射值被认为是一个字符串可观测量的类型。 Observable<string[]>
是其中每个发射值应该是一个字符串数组的可观察类型。
无论您指定给observable的类型如何,都不会改变observable实际发出的内容。这仅取决于观察结构的构建方式。如果你做observable.map(r => r.json())
和r.json
返回一个字符串,那么得到的observable将发出字符串,如果它返回一个字符串数组,那么得到的observable将会发出字符串数组。
说,如果r.json
具有像(r: Response): string[]
一个类型签名,打字原稿应该抱怨test1
的类型不兼容。
如果事件返回一个字符串数组,则应该使用;如果事件返回一个字符串数组,则返回。在这种情况下,您的observable似乎正在返回一个字符串数组。重要的是响应包含的内容。 :) –
toskv
这是我的想法。然而,我所有的观测数据被定义为Observable(而不是Observable ,但是我所有的数据都是作为数组从后端返回的;我没有收到TS警告,并且任何订阅代码似乎都不关心我定义它 –
Spikeh
你定义的类型只在编译时,运行时所有的类型信息都会丢失,服务器返回的结果应该是你的observable的类型,你写的类型在那里描述,他们没有强制它。我认为这里的问题是,你只是输入你的观察错误 – toskv