Interop 如何在类型参数中使用未包装的多态变量[union type]? 目标:绑定到

Interop 如何在类型参数中使用未包装的多态变量[union type]? 目标:绑定到,interop,ffi,reason,bucklescript,rescript,Interop,Ffi,Reason,Bucklescript,Rescript,我正在写一个绑定,让我在命令中写服务人员。字符串URL和s有时可以互换使用 尽可能避免JS输出中的噪音 我所知道的 我知道我可以像这样使用[@bs.unwrap]为类似的方法编写绑定 [@bs.send] 外部添加:(缓存,[@bs.unwrap][`Request(Request.t)|`String(String)]) =>Js.Promise.t(单位)=“添加”; 这是一个简单的用法 问题:使用请求和/或字符串的数组绑定 然而,该方法具有更复杂的类型签名。它采用一个对象数组,可以是一个

我正在写一个绑定,让我在命令中写服务人员。字符串URL和s有时可以互换使用

尽可能避免JS输出中的噪音

我所知道的 我知道我可以像这样使用
[@bs.unwrap]
为类似的方法编写绑定

[@bs.send]
外部添加:(缓存,[@bs.unwrap][`Request(Request.t)|`String(String)])
=>Js.Promise.t(单位)=“添加”;
这是一个简单的用法

问题:使用请求和/或字符串的
数组
绑定
然而,该方法具有更复杂的类型签名。它采用一个对象数组,可以是一个或多个请求数组,也可以是一个字符串数组,或者是一个同时包含两种类型项的数组

但据我所知,不能在类型参数中取消对类型的装箱,如

[@bs.send]
外部addAll:(缓存,
数组([@bs.unwrap][`Request(Request.t)|`String(String)])
=>Js.Promise.t(单位)=“addAll”;
问题是:这种绑定是否可以用于重新描述中的模型? 当然,放弃字符串大小写并使用请求或编写两个单独的绑定是合理的,并假设我不需要同时具有这两个绑定的数组


但现在我只是好奇:有没有办法在ReScript中的绑定中对这种类型进行建模?

您可以使用一个抽象类型和一组转换函数将值“强制转换”到该类型,而不是多态变量:

模块值={
t型;
外部请求:request.t=>t=“%identity”;
外部str:string=>t=“%identity”;
};
[@bs.send]
外部addAll:(缓存,数组(Value.t))=>Js.Promise.t(unit)=“addAll”;
用法示例:

addAll(缓存、[|
请求值(req),
Value.str(“foo”),
|])
或者为了简洁起见,使用local open:

addAll(缓存,值)[|
请求(req),
str(“foo”),
|])
这就是
Js.Json
编码器的工作方式,如果你想知道的话。既然
Js.Json
也有解码器,你知道如果你需要的话,也可以采用另一种方式。不过这样做有点复杂,而且取决于已经抽象掉的底层类型

顺便说一句,这是采取了,这也有相当多的其他食谱,可能会在这种棘手的情况下派上用场