idpokute
idpokute

Reputation: 608

how to use string indexed interface of typescript?

I'd like to use string index of interface.

interface IDictionary {
     [index: string]: string;
}
var params: IDictionary;
params = [{ "heart": "HP" }, { "mana": "MP" }];
console.log(params);

I thought this might be like MAP such as a pair of key and value. I'm not sure this is correct approach.

Upvotes: 31

Views: 58112

Answers (1)

basarat
basarat

Reputation: 275857

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

Upvotes: 51

Related Questions