我在一个模块中有一个班级。
module Foo {
export class Bar {
}
/* Some more interfaces and classes to be used only in this module */
}
var bar = new Foo.Bar();
本课程适用于图书馆,我不希望其他用户编写Foo.Bar,但只是Bar可以使用我的Bar类:
var bar = new Bar();
我可以通过定义一个新变量Bar来实现这一点。
var Bar = Foo.Bar;
var bar = new Bar();
然而,现在我有一个问题。我不能将Bar用作TypeScript类型标识符。
function something(bar: Bar) { // Compiler: Could not find symbol 'Bar'.
}
我也可以通过定义一个扩展Foo.Bar的新类来解决这个问题。
class Bar extends Foo.Bar {
}
var bar = new Bar();
function something(bar: Bar) {
}
但是,生成的Bar类与Foo.Bar不完全相同,因为Bar === Foo.Bar
和Bar.prototype === Foo.Bar.prototype
都返回false
。
我试图找到一个使用TypeScript模块功能的方法,例如import和require,但似乎我不能用它们来做。有没有什么好方法可以将我的Bar类暴露给全局?
答案 0 :(得分:2)
interface Bar extends Foo.Bar {
}
var Bar = Foo.Bar;
您可以这样做:
import Bar = Foo.Bar;
module Foo {
export class Bar {
x: number
}
/* Some more interfaces and classes to be used only in this module */
}
import Bar = Foo.Bar;
var bar = new Bar();
function something(bar: Bar) {
}
答案 1 :(得分:0)
事实证明这是按预期工作的。
module Foo {
export class Bar {
x: number
}
/* Some more interfaces and classes to be used only in this module */
}
interface Bar extends Foo.Bar {
}
var Bar = Foo.Bar;
var bar = new Bar();
function something(bar: Bar) {
}
谢谢!
答案 2 :(得分:0)
我不确定你是否需要/需要一个模块,只需导出类:
class Bar {
x: number;
}
/* Some more interfaces and classes to be used only in this module */
export = Bar;
然后在消费代码中:
import Bar = require('./Bar');
var bar = new Bar();