我可以将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();