【问题标题】:Typescript Compiler Error "Generic type requires 0 type argument(s)"Typescript 编译器错误“通用类型需要 0 个类型参数”
【发布时间】:2013-12-03 11:11:57
【问题描述】:

(这是对this answer的跟进。)

我正在尝试为现有的 Javascript 库构建打字稿定义文件。我遇到的困难与以下组合有关:

  • 嵌套类型
  • 泛型
  • 命名构造函数(与嵌套类型非常相似)

这是我试图在 lib.d.ts 库定义文件中编译的代码:

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

问题在于OtherModule.OtherInterface中泛型方法foo的声明

使用上面的代码,我得到了这个奇怪的编译器输出(使用 tsc 编译器 0.9.1.1):

error TS2090: Generic type 'MyModule.SomeClass' requires 0 type argument(s).

显然很难声明具有 0 类型参数的泛型类型,因为 &lt;&gt; 和没有类型参数的变体 MyModule.SomeClass 都不起作用 - 后者会给出这个稍微矛盾的错误:

error TS2173: Generic type references must include all type arguments.

如果我在MyModule 中声明OtherInterface 并省略模块名称,我可以编译它,但接口在现实世界中的不同模块中。

我怎样才能让它正常工作?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这看起来像是一个编译器错误 - 编译器没有意识到您正在尝试使用名为 SomeClass 的类,而不是名为 SomeClass 的模块。

    好消息是您的声明实际上是好的,下一版本的编译器 (0.9.5) 将会非常满意。

    你可以download the 0.9.5 beta,它有一些错误修复和性能改进(但显然是一个测试版......但我正在使用它,它看起来很稳定)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 2017-02-08
      • 2020-12-06
      • 2020-10-14
      • 2021-10-24
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多