Google cloud firestore 在Purescript中建模Javascript对象
我试图用Purescript对Firestore中的数据类型进行建模 到目前为止,我有以下几点Google cloud firestore 在Purescript中建模Javascript对象,google-cloud-firestore,purescript,Google Cloud Firestore,Purescript,我试图用Purescript对Firestore中的数据类型进行建模 到目前为止,我有以下几点 foreign import data FieldPath :: Type foreign import buildFieldPath :: Array String -> FieldPath foreign import fieldNames :: FieldPath -> Array String type MergeFields = Array (String \/ Field
foreign import data FieldPath :: Type
foreign import buildFieldPath :: Array String -> FieldPath
foreign import fieldNames :: FieldPath -> Array String
type MergeFields = Array (String \/ FieldPath)
data SetOptions
= MergeOption Merge
| MergeFieldsOption MergeFields
请注意,SetOptions
是一种求和类型,因为merge
和mergeFields
是互斥的(即使没有记录)
现在我需要将SetOptions
转换成一个Javascript对象,这样我就可以将它从Javascriptfirebase
库传递给某个函数
它应该是某种形式的
{
"mergeFields": [
"foo",
new FieldPath("bar", "baz")
]
}
我的问题就是这样
我无法使用,因为包含的数据不是同质的(merge
指布尔值,mergeFields
指数组)
我无法使用,因为我需要在结果中包含FieldPath
对象
到目前为止,我找到的唯一解决方案是返回一些
Json
,然后在javascript端解析它,并在需要的地方添加FieldPath
对象,但它看起来又脏又脆。我可能会跳过PS端的coproductSetOption
表示,只提供这两个“脏”构造函数:
foreign import data SetOption :: Type
merge :: Boolean -> SetOption
merge m = unsafeCoerce { merge: m }
mergeFields :: MergeFields -> SetOption
mergeFields mf = unsafeCoerce { mergeFields: mf }
对于MergeFields
coproduct,我可能也会这样做
在我们的社区项目中,我们也在做类似的事情——材料ui绑定:purescript-react-basic-mui
。此外,我们将这些相关的构造函数分组到记录中,以实现“廉价的名称空间”,因为我们是从typescript声明生成所有这些绑定,但在这种上下文中这并不重要。
请查看本示例模块中的一些定义:
编辑:我认为这对@macrosh来说是一个很好的额外启发。看看的文档和示例,它允许您根据Purescript记录定义副产品。这些对于JS互操作来说非常好。@marcosh我不确定是否会通知您我的编辑,但我在回复的末尾添加了指向其他资源的链接。