Uncaught (в обещании) ReferenceError, преобразующий addEventListener в Typescript - PullRequest
0 голосов
/ 08 января 2019

У меня есть простая веб-страница, которую я использую для отправки ввода текста на сервер XML RPC Я получил код, работающий в Javascript, но теперь я пытаюсь преобразовать его в Typescript и использую обещания с async / await. Это как учебный эксперимент. На моем нынешнем уровне опыта это будет немного сложно.

Предыдущий рабочий код Javascript:

import "./mimic.js";
function makeComment() {
    const method = "MakeComm";
    let request = new XmlRpcRequest("http://localhost:1337/RPC2", method);
    request.addParam(document.getElementById("n1")).value;
    request.addParam(document.getElementById("n2")).value;
    let response = request.send();
    console.log(response);
}

Как я уже говорил выше, эта функция правильно взаимодействует с сервером RPC XML. Вот мой преобразованный код Typescript:

import "./mimic.js";
const updateCommentBtn: HTMLButtonElement = document.getElementById(
    'makeComment',) as HTMLButtonElement;

updateCommentBtn.addEventListener('click', async () => {
    const method = "MakeComm";
    let request:any = new XmlRpcRequest("http://localhost:1337/RPC2", method);
    request.addParam(<HTMLInputElement>document.getElementById("n1")).value;
    request.addParam(<HTMLInputElement>document.getElementById("n2")).value;
    let response = await request.send();
    console.log(response);
});

Я получаю сообщение об ошибке:

Uncaught (in promise) ReferenceError: XmlRpcRequest is not defined
    at Object.<anonymous> (fileChange.ts:36)
    at new Promise (<anonymous>)
    at HTMLButtonElement.<anonymous> (fileChange.ts:34)

Вызов XmlRpcRequest - это функция, содержащаяся в ./mimic.js.

Мой HTML для версии Typescript:

<p>Make Comment:</p>
<input type="text" id="n1"/>
<input type="text" id="n2"/>
<button id="makeComment">Update Comment</button>

EDIT: mimic.js определяет XmlRpcRequest следующим образом:

function XmlRpcRequest(url, method) {
    this.serviceUrl = url;
    this.methodName = method;
    this.crossDomain = false;
    this.withCredentials = false;   
    this.params = [];
    this.headers = {};
};

1 Ответ

0 голосов
/ 08 января 2019

Спасибо за добавление вашего кода

Вы должны экспортировать такую ​​функцию в mimic.js

export const XmlRpcRequest = (url, method) => {
    this.serviceUrl = url;
    this.methodName = method;
    this.crossDomain = false;
    this.withCredentials = false;   
    this.params = [];
    this.headers = {};
};

и импортируйте его

import { XmlRpcRequest } from "./mimic";

Если ваша машинописная буква дает вам надстройку, вы можете добавить определения для аргументов следующим образом:

  export const XmlRpcRequest = (url: string, method: string) => {
        this.serviceUrl = url;
        this.methodName = method;
        this.crossDomain = false;
        this.withCredentials = false;   
        this.params = [];
        this.headers = {};
  };
...