31

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.

1 Answer 1

51

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
Sign up to request clarification or add additional context in comments.

2 Comments

Don't forget you need to initialize params.. params = {};
instead of hard defining the value as a string, using "any" will remove the limitation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.