我正在尝试将一些javascript转换为TypeScript,但我不知道typescript是否支持命名空间。我们的代码如下所示:
/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("MyNamespace.Controls.FloatingErrorPane");
MyNamespace.Controls.FloatingErrorPane = function (element)
{
...
}
MyNamespace.Controls.FloatingErrorPane.prototype =
{
...
}
有没有人知道是否可以在打字稿中指定包含句点的命名空间?我们在C#类中引用相同的名称,如:
[assembly: WebResource("MyNamespace.FloatingErrorPane.js", "text/javascript")]
ScriptControlDescriptor descriptor = new ScriptControlDescriptor("MyNamspace.Controls.Floating
ErrorPane“,this.ClientID);
答案 0 :(得分:4)
您可以使用嵌套模块和类来获取命名空间样式语法。
第一个例子与你问题中的例子相符......
module MyNamespace {
export module Controls {
export class FloatingErrorPane {
constructor(private element: HTMLElement) {
}
}
}
}
var errorPane = new MyNamespace.Controls.FloatingErrorPane(myElement);
如果您愿意,可以在多个文件中声明模块,因此可以通过再次声明第二个文件添加到MyNamespace
...
module MyNamespace {
export module Messaging {
export class MessageHandler {
}
}
}
答案 1 :(得分:0)
是的,你可以使用。用于创建嵌套命名空间的表示法,例如
module MyNamespace.Controls {
export class FloatingErrorPane {
constructor(element: HTMLElement) {
}
}
}
var errorPane = new MyNamespace.Controls.FloatingErrorPane(myElement);
或者您可以使用Sohnee所示的语法,您可以在其中连续声明模块。但是,您不能以这种方式直接定义类或函数。所以这是无效的:
MyNamespace.Controls.FloatingErrorPane = function() { ... }