Установить window.location с помощью TypeScript

Я получаю сообщение об ошибке с помощью следующего кода TypeScript:

 ///<reference path='../../../Shared/typescript/jquery.d.ts' />
 ///<reference path='../../../Shared/typescript/jqueryStatic.d.ts' />

 function accessControls(action: Action) {
    $('#logoutLink')
        .click(function () {
            var $link = $(this);
            window.location = $link.attr('data-href');
        });

 }

Я получаю подчеркнутую красную ошибку для следующего:

$link.attr('data-href'); 

В сообщении говорится:

Cannot convert 'string' to 'Location': Type 'String' is missing property 'reload' from type 'Location'

Кто-нибудь знает что это значит?

5 ответов

Решение

window.location имеет тип Location в то время как .attr('data-href') возвращает строку, поэтому вы должны назначить ее window.location.href который также имеет строковый тип. Для этого замените следующую строку:

window.location = $link.attr('data-href');

для этого:

window.location.href = $link.attr('data-href');

Вы пропустили href:

Стандарт, использовать window.location.href как window.location технически объект, содержащий:

Properties
hash 
host 
hostname
href    <--- you need this
pathname (relative to the host)
port 
protocol 
search 

пытаться

 window.location.href = $link.attr('data-href');

Естьassignметод в интерфейсе Location, который отлично работает с машинописным текстом при передаче строки и работает так же, какwindow.location = LOCATION.

      window.location.assign('http://example.com');
      interface Location {
    ...
    /** Navigates to the given URL. */
    assign(url: string | URL): void;
}

Этот метод, кажется, существует уже давно (IE 5.5!).

https://developer.mozilla.org/en-US/docs/Web/API/Location/assign

Реализуя сложную интеграцию с PayPal, я заметил очень вескую причину использовать  window.location, что не требует  SAME ORIGIN.

Поэтому мы сделали что-то вроде:

      (<any> window).location = myUrl;

Вместо:

      window.location.href = myUrl;

Где в случае ОП:

       var myUrl = $link.attr('data-href');;

Просто добавьте href

Нравится:

      window.location.href = $link.attr('data-href');
Другие вопросы по тегам