如何将Type.registerNamespace转换为TypeScript?

时间:2012-10-26 14:46:45

标签: typescript

我正在尝试将一些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);

2 个答案:

答案 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() { ... }