Using the indexer limits what can be put or fetched for the object using the index syntax. E.g. foo is inferred to be of type string:
interface IDictionary {
[index: string]: string;
}
var params = {} as IDictionary;
params['heart'] = 'HP'; // okay
var foo = params['heart']; // foo:string
The following on the other hand is an error as it will not type check:
var bar:number = params['heart']; // ERROR
params['heart'] = 234; // ERROR
Complete demo:
interface IDictionary {
[index: string]: string;
}
var params = {} as IDictionary;
params['heart'] = 'HP'; // okay
var foo = params['heart']; // foo:string
var bar:number = params['heart']; // ERROR
params['heart'] = 234; // ERROR