Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implement an indexible interface

Tags:

typescript

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 image 941
basarat Avatar asked Apr 27 '13 05:04

basarat


People also ask

CAN interface have indexers?

Like a class, Interface can have methods, properties, events, and indexers as its members.

How do you write an interface in JavaScript?

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);

How do you use implements in JavaScript?

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.


1 Answers

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

like image 56
Jude Fisher Avatar answered Jan 03 '23 17:01

Jude Fisher