我有5个班级:
我将导出为npm模块(用TS编写)。
我想要实现的是GConfig将有一个方法addPlugin(plugin: Plugin)
,它将参数作为自定义插件类的一个实例。
插件类看起来像:
目标是能够添加多个插件,其中每个插件都能够扩展核心库的相应GForest,GTree和GNode(添加到原型)并将这些扩充类返回给库消费者(客户端)。
应该存在添加多个插件的可能性,添加它们的顺序不重要。 (插件提供撤消和高级查询等功能)。
您认为这种方法是否可行,使用Typescript实现这一目标的常用方法是什么?
编辑:我本能地觉得这是mixins的一个用例,但我不确定在TS中动态添加这些mixins的设置。
答案 0 :(得分:1)
是的,它可行,但可能不适合mixins,因为那时你需要提前知道你想要的成员/方法。
您可以这样做:
// myplugin.ts
import * from "mylib";
declare module "mylib" {
interface GNode {
myNewMethod(): void;
}
}
class MyPlugin extends mylib.Plugin {
plugNode(cls: { new(): myLib.GNode }) {
cls.prototype.myNewMethod = function() {
console.log("hey, I'm the new method");
}
}
}
mylib.GConfig.addPlugin(new MyPlugin());
请注意,这是未经测试的代码,如果您尝试,可能会包含一些错误。