2014-09-12 69 views
0

所以我有一个现有的大型定义文件。可以说这是一个树项目TypeScript定义文件。外部插件

declare module Project{ 

    class Tree{ 
     x: number; 
     y: number; 
    } 

    module Plugins{ 

     class Plugin{ 

     } 

    } 

} 

所以这是在主项目d.ts文件。都好。让我们说这现在只读,以表明它不应该被编辑。

但现在有人已经出现并决定编写一个插件,但主定义是只读的,不应该被编辑。例如,有人制作了武器插件。他们需要项目插件weapon.d.ts

部分要求是这个插件添加数据到原始库。因此,“武器”被添加到树,它看起来像这样在JS:

Project.Tree.prototype.weapon = X 

所以项目的插件,weapon.d.ts看起来像这样

declare module Project { 

    module Plugins { 

     class Weapons{ 

     } 

     module Weapons{ 

      class Gun{ 

      } 

     } 

    } 

} 

但我怎么能连接武器属性到现有的主d.ts文件?

在project.d.ts文件中,Tree类必须是类,因为您可以实例化它。我试图创建一个ITree界面,以便class Tree implements ITree但是当我尝试从project-plugin-weapon.d.ts中添加到该界面时,它会抱怨我的project.d.ts文件没有实现属性武器。

declare module Project { 

    interface IGame{ 

     weapon: Gun; //complaint that Project.d.ts::Game does not implement weapon 

    } 

    module Plugins { 

     class Weapon{ 

     } 

     module Weapon{ 

      class Gun{ 

      } 

     } 

    } 

} 

那么如何构造一个定义文件来解决这个问题呢?

请注意,我已经看到JQuery作为示例,但JQuery在其定义中没有类。 Tree()需要构造函数的事实阻止我简单地复制JQuery-Plugin方法。

谢谢!

+0

为什么你不能只传递多个.d.ts文件到编译器? – Ameen 2014-09-12 16:07:51

+0

嗨Ameen,我会很乐意,但是这个插件扩展了更大定义的部分。如果'class Gun扩展了Project.Something',它将需要在新定义中重新定义Project.Something。在这种情况下,我相信我会得到一个稍微不同但相关的错误,因为Project.Tree会跨2个文件重复。 – Clark 2014-09-12 16:20:13

回答