作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 https://github.com/oblador/react-native-keychain/blob/master/typings/react-native-keychain.d.ts#L76 编写绑定(bind)
getGenericPassword 返回 false
如果出错,则返回 object
(credentials
)。我不确定这种联合类型是否可以合理地表示,但更好的 API 将是一个选项(选项(凭据))的结果。但是,如何转换 Promise<boolean | credentials>
-> Js.Promise.t(option(credentials))
在绑定(bind)文件中。下面是一个模板。
谢谢你的帮助。
[@bs.deriving abstract]
type credentials = {
service: string,
username: string,
password: string,
};
/* TODO convert the actual return value
Js.Promise.t(option(credentials)) to more reason type
Js.Promise.t(option(credentials)) */
[@bs.module "react-native-keychain"] [@bs.scope "default"]
external getGenericPassword: unit => Js.Promise.t(option(credentials)) = "";
最佳答案
您可以使用 Js.Types.classify
获取值的运行时类型。
type maybeCredentials;
[@bs.module "react-native-keychain"] [@bs.scope "default"]
external getGenericPassword: unit => Js.Promise.t(maybeCredentials) = "";
let getGenericPassword: unit => Js.Promise.t(option(credentials)) =
() =>
Js.Promise.(
getGenericPassword()
|> then_(maybeCredentials =>
switch (Js.Types.classify(maybeCredentials)) {
| JSObject(obj) => resolve(Some(obj |> Obj.magic))
| _ => resolve(None)
}
)
);
maybeCredentials
被定义并用作中间类型。
Js.Types.classify
获取返回值的运行时类型。如果它是一个对象,我们使用
Obj.magic
投出摘要
obj_type
到我们的
credentials
类型(从函数的返回类型推断),并将其包装在
option
中.对于任何其他类型,我们返回
None
.
关于ocaml - 如何为联合类型编写 reasonml 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297115/
我是一名优秀的程序员,十分优秀!