So I frequently use a JavaScript routine like this:
var vars = [], hash;
var q = document.URL.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
vars.push(hash[1]);
vars[hash[0]] = hash[1];
}
}
So let’s see what we can do with this in the world of TypeScript. Goals here:
- Add some type safety declarations
- Drop it in a module
- Update it a little as this was a really old snippet in JavaScript land.
So starting with the hash map and creating a class in typescript:
class QParams {
vars: { [field:string]:string; }; // A Typescript Hashmap
qstr: string;
constructor() {
this.qstr = document.URL.split['?'][1];
if (this.qstr != undefined) {
// Here I wanted to pause because in the original javascript
// q was overwritten from a string to an array of strings
}
}
}
Now reorganized and add a few more bits for the extra array:
class QParams {
paramhash: { [field: string]: string; }; // A Typescript Hashmap
params: string[];
qstr: string;
constructor() {
this.qstr = document.URL.split['?'][1];
if (this.qstr != undefined) {
this.params = this.qstr.split('&');
for (var i: number; i < this.params.length; i++) {
var pair = this.params[i].split('=');
this.paramhash[pair[0]] = pair[1];
}
}
}
}
Then run this through the typescript compiler produces this javascript:
var QParams = (function () {
function QParams() {
this.qstr = document.URL.split['?'][1];
if (this.qstr != undefined) {
this.params = this.qstr.split('&');
for (var i; i < this.params.length; i++) {
var pair = this.params[i].split('=');
this.paramhash[pair[0]] = pair[1];
}
}
}
return QParams;
})();
//# sourceMappingURL=qparams.js.map