要全面了解跨空间和时间的各种类型的值,包括单数和复数,请参阅A General Theory of Reactivity。
数组是一个空间可迭代。换句话说,它是一个可迭代的(事物列表),存在于空间中的某个点,您现在可以并且想要使用它。
一个 observable 是一个时间可迭代。换句话说,它是一个随时间展开的事物列表,您可以逐一消费。
举个具体的例子,让我们来看看如何迭代每种类型的列表:
数组:
const array: Array<number> = [1, 2, 3];
array.forEach(elt => console.log(elt));
这是同步的,将立即执行。
可观察:
const observable: Observable<number> = Observable.from([1, 2, 3]);
observable.subscribe(elt => console.log(elt));
这是异步的,将在元素进入时一次执行一个元素。
但是,您提出了一个稍微不同的问题,即数组和可观察数组之间的区别(为了清楚起见,我们应该避免将其称为“可观察数组”,因为这可能会被误解为“可观察的数组”,这是另一回事,虽然肯定有用)。
不同之处在于,正如我所提到的,数组只是单个时间点的单个值列表。可观察的数组是数组的流,每个“滴答”都会产生一个完整的、新的、不同的数组。
因此,如果您只想要一个项目列表,请使用数组。当然,您可以改变或转换数组,但这并不会改变在任何给定时间点只有一个数组这一事实。
如果您打算继续获取数组的新版本(在不同时间点的不同版本)并且您希望将每个新版本“推送”到程序的不同部分,请使用可观察的数组,这在 observable 术语中,将“订阅” observable,并在每次更新时收到通知。
那么回答你的问题:
any[] 和Observable<any[])> 的主要区别是什么?
一个是数组,另一个是数组的可观察(流)。
使用它们各自的优缺点是什么?
利弊是,如果你想要一个数组,你应该使用一个数组。如果你想要一个可观察的数组,那么你应该使用一个可观察的数组。
请注意,尽管您的问题涉及 TypeScript,但数组和可观察对象(包括数组的可观察对象)的概念本质上与语言无关。