我正在开发nodeJS + Typescript。我有一个OO背景,我想从nodejs模块中受益,但我很难将它们与不应该是模块的类混合在一起。
这就是我要做的事情:
foo.ts(模块)
import http = require("http")
export class Foo {
public fooMethod() : number { ... }
}
bar.ts(不应该是模块)
namespace Ns {
export class Bar {
constructor(private foo: Foo) { ... } //"Foo" is not being found by the intellisense
public barMethod() : number {
return this.foo.fooMethod()
}
}
}
server.js(节点启动文件)
var Foo = import("./foo");
var foo = new Foo();
foo.configure(...) //Configure foo before inject it into bar
var bar = new Ns.Bar(foo)
尝试构建代码时我遇到的问题:
我不想强迫我的标准。我想知道我正在尝试做什么的正确方法。这场斗争使我觉得在开发nodejs应用程序时我有义务重新设计并完成所有模块。是吗?
如果我应该使用完整的模块,我应该如何管理依赖注入?
谢谢
答案 0 :(得分:1)
要充分利用 OOP (或更好地说Interface-based programming或面向协议的编程)的强大功能,您应该使用interface Foo
来隐藏使用MyFoo
类的具体实施Bar
。
Foo.ts
export interface Foo {
fooMethod(): number;
}
MyFoo.ts
export class MyFoo {
fooMethod(): number {
return 1;
}
}
Bar.ts
import {Foo} from './Foo'
export class Bar {
constructor(private foo: Foo) {}
barMethod(): number {
return this.foo.fooMethod();
}
}
其他地方:
import {Boo} from './Boo'
import {MyFoo} from './MyFoo'
const result = new Boo(new MyFoo()).barMethod();
我个人不建议使用命名空间。您可以阅读有关命名空间和模块here的更多信息。