typescript基类型'xxxx'在声明之前被引用

时间:2012-10-22 22:09:26

标签: typescript

我正在尝试为CreateJS制作一个TypeScript声明文件(www.createjs.com)。

我有一个基类声明,如下所示:

/// <reference path="../geom/Point.d.ts"/>
/// <reference path="../geom/Rectangle.d.ts"/>
/// <reference path="../geom/Matrix2D.d.ts"/>
/// <reference path="../filters/Filter.d.ts"/>
/// <reference path="Shadow.d.ts"/>
/// <reference path="Shape.d.ts"/>
/// <reference path="Stage.d.ts"/>

declare module createjs {
  class DisplayObject {

    // constructor:
    constructor();

    ... additional methods

  }
}

然后我声明了更多从DisplayObject派生的类:

/// <reference path="DisplayObject.d.ts"/>
declare module createjs {
      class Bitmap extends DisplayObject{
        constructor (imageOrUri:any);

        ... additional methods

      }
    }


   /// <reference path="DisplayObject.d.ts"/>
   declare module createjs {
      class Container extends DisplayObject{
        constructor();

        ... additional methods

      }
    }

    /// <reference path="../../tweenjs/Timeline.d.ts"/>
    /// <reference path="DisplayObject.d.ts"/>
    /// <reference path="Container.d.ts"/>
    declare module createjs {
      class MovieClip extends Container{
        constructor (mode: string, startPosition: number, loop: bool, labels: any);

        ... additional methods

      }
    }

等。等

但我总是遇到这样的编译器错误:

  

基类型'DisplayObject'在声明之前被引用   要么   基类型'Container'在其声明之前被引用。

我看不出我做错了什么,一切看起来都不错。 任何帮助真的很感激......非常感谢提前!

1 个答案:

答案 0 :(得分:4)

如果你的代码分成多个文件,你需要让开发工具和编译器使用引用知道其他文件:

/// <reference path="createjs.ts" />

我刚刚在Visual Studio中对此进行了测试,似乎清除了错误,假设您的第一个代码块位于名为createjs.ts的文件中,您可以将其添加到第二个文件的顶部。

如果它们按照您指定的顺序存在于同一个文件中,则一切都适合我。

<强>更新

我创建了一个包含以下文件的Visual Studio项目,一切正常 - 我遇到的一件事是您可能将代码组织到文件夹中,在这种情况下,您需要使用相对路径,例如:

/// <reference path="./createjs/DisplayObject.d.ts" />

无论如何,这是我在空项目中的工作设置:

DisplayObject.d.ts

declare module createjs {
    class DisplayObject {
        // constructor:
        constructor ();
    }
}

Bitmap.d.ts

/// <reference path="DisplayObject.d.ts"/>

declare module createjs {
    class Bitmap extends DisplayObject {
        constructor (imageOrUri: any);
    }
}

Container.d.ts

/// <reference path="DisplayObject.d.ts"/>

declare module createjs {
    class Container extends DisplayObject {
        constructor ();
    }
}

一切都很开心。您不需要export关键字,因为它们都在同一个模块中。

如果您想查看示例,我很乐意将其压缩到某处。