(This is a follow up to this answer.)
I am trying to build a typescript definition file for an existing Javascript library. The difficulties I have are related to the combination of:
- nested types
- generics
- named constructors (which are very similar to nested types)
This is the code I'm trying to compile in a lib.d.ts library defintion file:
declare module MyModule {
export class SomeClass<T> {
new(); // default (unnamed) constructor for SomeClass
static WithEnumValue: { // "named constructor" for SomeClass
new <T>(enumValue: MyModule.SomeClass.SomeEnum): SomeClass<T>;
};
}
export module SomeClass {
export enum SomeEnum { VALUE_A, B, C }
}
}
declare module OtherModule {
export interface OtherInterface {
foo<T>(inst: MyModule.SomeClass<T>);
}
}
The problem is the declaration of the generic method foo in the OtherModule.OtherInterface
Using the above code I get this strange compiler output (using tsc compiler 0.9.1.1):
error TS2090: Generic type 'MyModule.SomeClass' requires 0 type argument(s).
Obviously it is hard to declare a generic type with 0 type arguments, because neither <> nor the variant without type arguments MyModule.SomeClass will work - the latter will give this slightly contradicting error:
error TS2173: Generic type references must include all type arguments.
I can get it to compile if I declare the OtherInterface inside MyModule and leave away the module name, but the interface is in a different module in the real world.
How can I get this to work properly?