所以我有一个现有的大型定义文件。可以说这是一个树项目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方法。
谢谢!
为什么你不能只传递多个.d.ts文件到编译器? – Ameen 2014-09-12 16:07:51
嗨Ameen,我会很乐意,但是这个插件扩展了更大定义的部分。如果'class Gun扩展了Project.Something',它将需要在新定义中重新定义Project.Something。在这种情况下,我相信我会得到一个稍微不同但相关的错误,因为Project.Tree会跨2个文件重复。 – Clark 2014-09-12 16:20:13