Поведение конструктора JavaScript в ReasonML с использованием BuckleScript

Я хочу сгенерировать функцию javascript с именем Publisher из ReasonML, чтобы я мог использовать ее в других файлах, например:

const publisher = new Publisher("Prasad", "[email protected]", "[email protected]", "rill")
const req = Publisher.toAPI(publisher) //  returns {name: "Prasad", email: "[email protected]", team: "[email protected]", service: "rill"}

Для достижения вышеуказанной функциональности я написал код ReasonML в файле с именем Util.re, который:

type publisher = {
  name: string,
  emailID: string,
  teamEmailID: string,
  serviceName: string,
};

type publisherReqBody = {
  name: string,
  email: string,
  team: string,
  publisher: string,
};

module Publisher = {
  let toAPI = (p: publisher) => {
    name: p.name,
    email: p.emailID,
    team: p.teamEmailID,
    publisher: p.serviceName,
  };
  [@bs.new] external create: unit => publisher = "Publisher";
};


После компиляции из ReasonML в JavaScript с использованием BuckleScript я получил

// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE


function toAPI(p) {
  return {
          name: p.name,
          email: p.emailID,
          team: p.teamEmailID,
          publisher: p.serviceName
        };
}

var Publisher = {
  toAPI: toAPI
};

export {
  Publisher ,

}

Я не уверен, почему строка [@bs.new] external create: unit => publisher = "Publisher"; не работает. Я пытался час, но без толку.

Мой вопрос:

как достичь функциональности, о которой я упоминал в первом фрагменте кода в JavaScript, который скомпилирован из ReasonML

Большое спасибо!


person REDDY PRASAD    schedule 02.01.2020    source источник
comment
Обратите внимание, что я ответил на ваш вопрос в форуме. Пожалуйста, спрашивайте в одном месте за раз или хотя бы дайте ссылку на другие места, чтобы мы не дублировали усилия :-) reasonml.chat/t/   -  person Yawar    schedule 03.01.2020


Ответы (1)


Внешнее определение - это описание того, как использовать значение JavaScript, а не само значение. Когда вы используете это внешнее устройство, он встроит правильный код на место.

Если вы сделаете let publisher = Publisher.create(); под фрагментом кода, вы увидите, что сгенерированный код на сайте вызова будет:

var publisher = new Publisher();
person bloodyowl    schedule 02.01.2020
comment
Я хочу вызвать функцию create из javascript как new Publisher. Ваше решение создает объект издателя в сгенерированном javascript. - person REDDY PRASAD; 02.01.2020
comment
Затем вы можете присвоить внешнему псевдониму привязку let: let create = create; - person bloodyowl; 08.01.2020