ReasonML поле записи JavaScript - PullRequest
0 голосов
/ 06 июля 2018

Скажем, у меня есть следующие типы Bucklescript:

type amqp;

[@bs.val] external amqpLib: amqp = "Amqp";

[@bs.module] external amqplib : amqp = "";

class type amqpConnectionT =
  [@bs]
  {
    pub createChannel: unit => unit;
    pub close: unit => unit
  };

type amqpConnection = Js.t(amqpConnectionT);

let make = () => amqplib;

[@bs.send] external connect : (amqp, string) => Js.Promise.t(amqpConnection) = "";

let connectAmqp = (input: string, amqpClient: amqp) : Js.Promise.t(amqpConnection) => connect(amqpClient, input);

let makeConnection = (input) => make() |> connectAmqp(input, _);

, а затем следующий код:

let start = () =>
  Amqp.makeConnection("amqp://localhost")
  |> Js.Promise.then_(connection => {
    Js.log(connection);
    connection.createChannel();
    Js.Promise.resolve(connection);
  });

start();

Это не с:

The record field createChannel can't be found.

Почему? Как неправильная аннотация моего типа?

И как правильно представить методы-члены, подобные этим, в ReasonML?

1 Ответ

0 голосов
/ 06 июля 2018

попробуйте connection##createChannel(), если оно исходит от JS.

Компилятор считает, что соединение является записью, так как вы используете . accessor

...