3

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

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

/// <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”在其声明之前被引用。

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

4

1 回答 1

5

如果您的代码被拆分为多个文件,您需要让开发工具和编译器使用参考来了解其他文件:

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

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

如果它们都按照您指定的顺序在同一个文件中,那么这一切都对我有用。

更新

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

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

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

显示对象.d.ts

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

位图.d.ts

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

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

容器.d.ts

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

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

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

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

于 2012-10-22T22:39:15.050 回答