我已经通过bs-json对对象进行了编码,并希望使用bs-axios将其作为数据发送到post中。
33 │ let createTest = (p: Data.toBuyListItem) => inst->Instance.postData("/
test", p |> Data.encodeToBuyListItem);
...
This has type:
Js.Json.t (defined as Js.Json.t)
But somewhere wanted:
Js.t('a)p |> Data.encodeToBuyListItem是红色的。如何将Js.Json.t值用作post请求的数据?
编辑:
好吧,这起作用是:
let createTest = (p: Data.toBuyListItem) => inst->Instance.postData("/test", [%raw "p"]);但是我更喜欢一个无恶意的解决方案(最好使用bs-json,因为我用它来解码JSON).
发布于 2020-02-09 15:45:05
无法安全地将Js.Json.t转换为Js.t,因为后者表示JavaScript对象,而JSON不只是表示对象。但是bs-axios似乎还是把安全扔出了窗外,所以你可以不安全地把它扔出去:
external jsonToObjects : Js.Json.t => Js.t({..}) = "%identity";%identity是一种通用机制,可用于在任意两种类型之间进行转换,因此对于类型而言,这是非常不安全的。你基本上是在说:“当我交换这些东西,相信我的时候,我知道我在做什么”。所以一定要做到。
另一种选择是直接创建Js.t对象。这是一个内置的语法,所以很简单:
let obj = {
"data": someData
};someData在这里可以是任何值,甚至是Js.Json.t值,但这也意味着您可以传递不可序列化的值,Js.Json.t保护您不受这些值的影响。
考虑到bs-axios API本质上是不安全的,这里有一个小的安全权衡,但我认为最简单的都会做得很好。
https://stackoverflow.com/questions/60137603
复制相似问题