3

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

4

2 回答 2

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 {

        }
    }
}
于 2012-10-26T14:52:54.043 回答
0

是的,您可以使用 . 创建嵌套命名空间的符号,例如

module MyNamespace.Controls {
    export class FloatingErrorPane {
        constructor(element: HTMLElement) {
        }
    }
}

var errorPane = new MyNamespace.Controls.FloatingErrorPane(myElement);

或者,您可以使用 Sohnee 所示的语法,在其中连续声明模块。但是,您不能以这种方式直接定义类或函数。所以这是无效的:

MyNamespace.Controls.FloatingErrorPane = function() { ... }
于 2012-10-27T06:47:32.210 回答