interface InterfaceSimple { p : Date ; q ? : number ; f ( x ) : string ; } class InterfaceClassSimple implements InterfaceSimple { p : Date ; f ( x ) { return x . toLocaleString ( ) ; } } class InterfaceClassMissingType implements InterfaceSimple { p : Date = new Date ( ) ; f ( x ) { return x . toLocaleString ( ) ; } } interface DerivedInterface < T > extends Set < T > { type : T ; } interface InterfaceWithIndexer { [ key ] : number ; } interface InterfaceWithGenerics < T1 , T2 , T3 > { p : T1 ; f ( x ) : T3 ; g ( x , y ) : number ; } interface InterfaceWithVariance { invariant : ( ) => void ; readonly covariant : number | string ; contravariant : string [ ] ; } interface InterfaceWithCallable { ( x , y ) : string ; < T > ( p ) : T ; } function functionWithInterfaceParameter ( i ) { return i . f ( 5 ) ; } const arrowFunctionWithInterfaceParameter = i => i . p ; const objectWithInterfaceType = { x : 1 , f : p => p . length } ; interface InterfaceAlias { p : Date ; f ( x ) : number ; } interface InterfaceAliasWithExtend extends InterfaceAlias { g ( x ) : string ; } interface InterfaceAliasWithGenerics < T > extends Map < T , T > { p : string ; } type InterfaceAliasGeneric = InterfaceSimple ;