Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将TypeScript类从我自己的模块导入全局吗?_Typescript - Fatal编程技术网

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

我可以将TypeScript类从我自己的模块导入全局吗?,typescript,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(); 我可以通过定义一个新的变量栏来实现这一点 var Bar =

我有一个模块中的类

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();
我可以通过定义一个新的变量栏来实现这一点

var Bar = Foo.Bar;

var bar = new 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


我试图找到一种使用诸如import和require之类的TypeScript模块特性的方法,但似乎我无法使用它们。有什么好方法可以将我的Bar类公开给global吗?

事实证明,这是可以实现的

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) {

}
谢谢

而不是 您可以简单地执行以下操作:

import Bar = Foo.Bar;
完整示例:
我不确定您是否想要/需要模块,只需导出类:

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

简单多了!这就是我想要的。非常感谢你!哎呀。生成的d.ts文件现在不包括Bar作为全局类对象。嗯…d.ts问题似乎在新的编译器中得到了解决。请参阅:使用当前版本1.1编译器的任何人都应该添加
import Bar=Foo.Bar自己在d.ts文件中的行。此方法似乎要求用户使用“require”。这不是问题,但我更喜欢让事情变得简单,而
import Bar=Foo.Bar
正是我想要的!谢谢你的回答:)
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();