How would I implement an interface that is indexible:
interface fooInterface{
// indexable
[index:string]:number;
[index:number]:number;
}
class Foo implements fooInterface{
// What goes here?
}
Like a class, Interface can have methods, properties, events, and indexers as its members.
The easiest way to see how interfaces work is to start with a simple example: function printLabel(labelledObj: { label: string }) { console. log(labelledObj. label); } let myObj = {size: 10, label: "Size 10 Object"}; printLabel(myObj);
Implement. js is a library that attempts to bring interfaces to JavaScript. The idea is simple: define an interface, define the types of it's properties, and use it to ensure an object is what you expect it to be.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With