Set window.location with 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'

Does anyone know what this means?

102655 次浏览

window.locationLocation类型,而 .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');

再加上 Href

像这样:

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

在实现复杂的 PayPal 集成时,我注意到使用 window.location的一个非常有说服力的理由,那就是 it does not require SAME ORIGIN.

因此我们做了这样的事情:

(<any> window).location = myUrl;

而不是:

window.location.href = myUrl;

在观察所的情况下:

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

Location 接口上有一个 assign方法,当传递一个字符串时,它可以很好地处理类型脚本,其工作原理与 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