目标:绑定到Service Worker 缓存
我正在编写一个绑定,让我在 ReScript 中编写 Service Worker。字符串 URL 和Request有时可以互换使用。
在可能的情况下,我会避免 JS 输出中的噪音。
我对[@bs.unwrap]的了解
我知道我可以像这样使用add方法编写绑定[@bs.unwrap]
[@bs.send]
external add: (cache, [@bs.unwrap] [ `Request(Request.t) | `String(string)])
=> Js.Promise.t(unit) = "add";
这是一个简单的用法。
array
问题:与请求和/或字符串绑定
然而, addAll方法具有更复杂的类型签名。它需要一个对象数组,可以是数组或请求,也可以是字符串数组或同时具有这两种类型的项目的数组。
但据我所知,您不能在类型参数中拆箱类型,例如
[@bs.send]
external addAll: (cache,
array([@bs.unwrap] [ `Request(Request.t) | `String(string)])
=> Js.Promise.t(unit) = "addAll";
问题:这种绑定可以在 ReScript 中建模吗?
当然,放弃字符串大小写并使用 Requests 或编写两个单独的绑定并假设我不需要同时具有两者的数组是合理的。
但现在我只是好奇:有没有办法在 ReScript 的绑定中对这种类型的类型进行建模?