Sebastian
Sebastian

Reputation: 8005

Typescript Compiler Error "Generic type requires 0 type argument(s)"

(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:

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?

Upvotes: 3

Views: 1427

Answers (1)

Fenton
Fenton

Reputation: 251192

This looks like a compiler bug - the compiler isn't realising that you are trying to use the class named SomeClass rather than the module named SomeClass.

The good news is that your declaration is actually good and the next version of the compiler (0.9.5) will be perfectly happy with it.

You can download the 0.9.5 beta, which has some bug fixes and performance improvements (but is obviously a beta... but I'm using it and it seems stable).

Upvotes: 5

Related Questions