Установить 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');