Javascript 区分ImmutableJS和原生JS数据结构?

Javascript 区分ImmutableJS和原生JS数据结构?,javascript,immutable.js,Javascript,Immutable.js,我正在编写一个React组件,我打算公开它,我希望它能与JS数组/对象或immutable.JS等价物(Map/List)配合使用 识别Immutable.js映射或列表的最佳方法是什么?我不想简单地使用Array.isArray,因为我确实想强制它是一个数组或一个列表,例如 我可以只检查一些Immutable.js属性,比如\u origin或\u ownerID,但我不想依赖于在小版本中可能会发生更改的内部API。我非常推荐@robg和@joseph the dreamer给出的建议。但是,

我正在编写一个React组件,我打算公开它,我希望它能与JS数组/对象或immutable.JS等价物(Map/List)配合使用

识别Immutable.js映射或列表的最佳方法是什么?我不想简单地使用
Array.isArray
,因为我确实想强制它是一个数组或一个列表,例如


我可以只检查一些Immutable.js属性,比如
\u origin
\u ownerID
,但我不想依赖于在小版本中可能会发生更改的内部API。

我非常推荐@robg和@joseph the dreamer给出的建议。但是,为了满足您的确切需要,对于每个Immutable.Type,都有一个Immutable.Type.isType()静态函数,您可以使用它来确定给定对象是否属于该类型

例如-


也许您可以换一种方式,说明需要执行哪些需要不同处理的操作。这样,您就可以处理任何类型的对象,或者在代码中更加明确,在对象结构中更加一致。这总比每次都要蹲着打字,而且有50%的时间都出错要好。@RobG我不确定我是否理解。。。我将以不同的方式处理它们,我只需要首先识别它们。为了给出一个更具体的例子,我制作了一个网格组件,它接受一个二维数组或列表。我需要遍历它,所以我需要知道我是否可以只
arr[x][y]
,或者我是否必须
arr.getIn(['x','y'])
@JosephDreamer我的想法是我将通过NPM发布这个。我想支持Immutable.js(因为很多人在redux中使用它,我不希望他们需要
.toJS
它),但我也不想强迫每个人都使用Immutable。如果这都是我自己的代码,我可以保持一致,但事实并非如此:)@JoshuaComeau你可以做
如果(typeof arr.getIn=='function')
那么你有一个不可变的.js列表,否则就假设它是一个数组。但还有一点。
var im = require("immutable");

if (im.Map.isMap(someObjectWhichMayBeMap)){
    ...
}