javascript - Setează window.location cu TypeScript


Primesc o eroare cu următorul cod 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');
        });

 }

Primesc o eroare subliniată cu roșu pentru următoarele:

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

Mesajul spune:

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

Cineva știe ce înseamnă asta?

Răspuns #1

window.location este de tip Location, în timp ce .attr('data-href') returnează un șir de caractere, așadar trebuie să îl atribuiți lui window.location.href care este de asemenea de tip șir de caractere. Pentru asta, înlocuiți următoarea linie:

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

pentru acesta:

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

Răspunsul #2

ai ratat href:

Standard, Pentru a folosi window.location.href deoarece window.location este tehnic un obiect care conține:

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

încearcă

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

Răspunsul #3

Există o metodă assign pe interfața Location care funcționează perfect cu TypeScript atunci când i se transmite un șir și funcționează la fel ca window.location=LOCATION.

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

Metoda pare să existe de mult timp (IE 5.5!).

https://developer.mozilla.org/ro/docs/Web/API/Location/assign