How would I implement an interface that is indexible:
interface fooInterface{
// indexable
[index:string]:number;
[index:number]:number;
You don't ever implement it in the class definition, but only by addressing instance[index]
, so your fooInterface
cannot be be used via implements
on a TypeScript class, but can be used to describe the expected structure of an object, e,g. var foo: fooInterface = {};
Describing an Indexable Object
A common pattern in JavaScript is to use an object (e.g. {}) as way to map from a set of strings to a set of values. When those values are of the same type, you can use an interface to describe that indexing into an object always produces values of a certain type (in this case, Widget).
interface WidgetMap {
[name: string]: Widget;
}
var map: WidgetMap = {};
map['gear'] = new GearWidget();
var w = map['gear']; // w is inferred to type Widget
Quote and Widget example taken from: http://blogs.msdn.com/b/typescript/archive/2013/01/24/interfaces-walkthrough.aspx