Ошибка возврата запроса Typescript AJAX

#javascript #web-applications #typescript

#javascript #веб-приложения #typescript

Вопрос:

Когда я выполняю AJAX-запрос в typescript, он работает до тех пор, пока я не попытаюсь получить ответ:

 let req = new XMLHttpRequest();
req.open('GET','img/spritesheet.json',true);
req.send();
req.responseType = 'json';
req.onload=(data)=>{
  var json = data.currentTarget.response;
}
  

Он выдает мне ошибку:

«Свойство ‘response’ не существует для типа ‘EventTarget’

Каким бы крутым ни был typescript, некоторые вещи не имеют абсолютно никакого смысла. Каково решение для выяснения этого?

Комментарии:

1. Не могли бы вы опубликовать полный код здесь?

2. Решение: не используйте typescript : P

3. Это полный код для запроса ajax.

4. Возможно json = req.response

5. или просто используйте выборку… fetch(url).then(res => res.json()).then(json => { ... })

Ответ №1:

Сигнатура для функции обратного вызова load является:

 (ev: Event) => any
  

Где событие — это общее событие, которое выглядит следующим образом:

 interface Event {
    ...
    currentTarget: EventTarget;
    ...
}
  

И EventTarget является:

 interface EventTarget {
    addEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void;
    dispatchEvent(evt: Event): boolean;
    removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void;
}
  

У которого нет response свойства.

Вот почему вы получаете эту ошибку, что касается того, как с ней бороться, почему бы вам просто не использовать объект запроса?
Он имеет свойства response и responseText, которые вы можете использовать, нет необходимости получать данные из объекта события, который получает обратный вызов.