我正在使用工厂模式在typescript中开发一个节点模块,我想只公开工厂类和接口。
结构:
iexp.ts
C_INCLUDE_PATH=/usr/local/Cellar/imagemagick/6.9.5-9_1/include/ImageMagick-6 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig gem install rmagick
A.ts
export interface IExp {
methodX();
}
B.ts
class A implements IExp {
}
factory.ts
class B implements IExp {
}
所有类和接口都在自己的源文件中。我不想公开A类和B类,所以我没有使用 export ,但是我也无法在ExpFactory类中使用它们。在Java中,类可以有包范围,但是我怎样才能在打字稿中做同样的事情?
答案 0 :(得分:1)
如果他们在同一个文件中,您可以使用A
中的B
和ExpFactory
。如果没有,那么你必须从模块中导出它们,这是全部或全部(它只能是公共的)。
但是,这并不能让您从模块外部轻松访问它们。如果要捆绑库,则入口点必须再次导出类,否则将无法在模块外部访问它们。如果您没有捆绑,用户必须找出相对路径并直接从中导入。
答案 1 :(得分:0)
(个人风格建议)在javascript中,使用闭包和选择包可以更好地实现工厂模式。
class Root {
method1()
method2()
}
class Child extends Root {
method1() //...
}
通过类似之类的东西可以更好地实现
function Root( opts : Options ) {
var method1 = opts.method1 || defaultMethod1()
var method2 = opts.method2 || defaultMethod2()
return { method1, method2 }
}
使用new
在javascript中完全没有必要,甚至不被视为有害。