javascript - Postavljanje window.location s TypeScriptom


Dobivam pogrešku s sljedećim TypeScript kodom:

 ///<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');
        });

 }

Dobivam podcrtanu crvenu pogrešku za sljedeće:

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

Poruka kaže:

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

Zna li itko što ovo znači?

Odgovor #1

window.location je tipa Location, dok .attr('data-href') vraća string, pa ga morate dodijeliti na window.location.href koji je također tipa string. Za to zamijenite sljedeći redak:

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

za ovo:

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

Odgovor #2

propustili ste href:

Standardno, za korištenje window.location.href kao window.location tehnički je objekt koji sadrži:

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

pokušati

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

Odgovor #3

Na sučelju Location postoji metoda assign koja savršeno funkcionira s Typescriptom kada joj se proslijedi string i radi isto kao window.location=LOCATION.

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

Čini se da metoda postoji već dugo vremena (IE 5.5!).

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

Povezani članci