reasonml记录与JS对象

Abr*_*m P 2 ocaml record reason bucklescript

假设我定义了以下类型:

type queueParams = {
  durable: bool
};

class type amqpChannelT = [@bs] {
  pub assertQueue: string => queueParams => Js.Promise.t(unit);
};
Run Code Online (Sandbox Code Playgroud)

然后调用以下内容:

channel##assertQueue("exampleQueue", {"durable": bool});
Run Code Online (Sandbox Code Playgroud)

结果是:

This has type:
    {. "durable": bool}
  But somewhere wanted:
    queueParams (defined as
Run Code Online (Sandbox Code Playgroud)

我怎样才能传递正确的东西?为什么我传递的东西不是记录?点符号的含义是什么?

Har*_*pal 5

ReasonML以不同的方式解释这两个:

let jsObject = {"durable": true};
let reasonRecord = {durable: true};
Run Code Online (Sandbox Code Playgroud)

基本上,使用双引号包装键是特殊Javascript对象类型的简写符号Js.t('a)- 目前已弃用.

你可以在这里玩一个例子.请注意转换为Javascript时如何区别对待这两种类型.

在此处阅读有关已弃用语法的更多信息:

https://bucklescript.github.io/docs/en/object-deprecated