import Url = require("domurl"); interface UModel { a: any; b: string; } interface U2Model { a: any; } interface U3Model { foo: string; } var u = new Url(); // current document URL will be used // or we can instantiate as var u2 = new Url("http://example.com/some/path?a=b&c=d#someAnchor"); // it should support relative URLs also var u3 = new Url("/my/site/doc/path?foo=bar#baz"); // get the value of some query string parameter console.log(u2.query.a); // or console.log(u3.query["foo"]); // Manipulating query string parameters u.query.a = [1, 2, 3]; // adds/replaces in query string params a=1&a=2&a=3 u.query.b = 'woohoo'; // adds/replaces in query string param b=woohoo if (u.query.a instanceof Array) { // the way to add a parameter u.query.a.push(4); // now it's "a=1&a=2&a=3&a=4&b=woohoo" } else { // if not an array but scalar value here is a way how to convert to array u.query.a = [u.query.a]; u.query.a.push(8) } // The way to remove the parameter: delete u.query.a; // If you need to remove all query string params: console.log(u.clearQuery()); console.log(u.queryLength()); console.log(u.isEmptyQuery()); // Lookup URL parts: console.log( 'protocol = ' + u.protocol + '\n' + 'user = ' + u.user + '\n' + 'pass = ' + u.pass + '\n' + 'host = ' + u.host + '\n' + 'port = ' + u.port + '\n' + 'path = ' + u.path + '\n' + 'query = ' + u.query + '\n' + 'hash = ' + u.hash ); // Manipulating URL parts u.path = '/some/new/path'; // the way to change URL path u.protocol = 'https'; // the way to force https protocol on the source URL // inject into string var str = 'My Cool Link'; // or use in DOM context var a = document.createElement('a'); a.href = u.toString(); a.innerHTML = 'test'; document.body.appendChild(a); // Stringify var su1 = u + ''; var su2 = String(u); var su3 = u.toString(); // NOTE, that usually it will be done automatically, so only in special // cases direct stringify is required