我可以将TypeScript类从我自己的模块导入全局吗?

时间:2014-07-21 09:11:52

标签: typescript

我在一个模块中有一个班级。

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.BarBar.prototype === Foo.Bar.prototype都返回false

我试图找到一个使用TypeScript模块功能的方法,例如import和require,但似乎我不能用它们来做。有没有什么好方法可以将我的Bar类暴露给全局?

3 个答案:

答案 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();