如何将Type.registerNamespace转换为TypeScript?

3

我正在尝试将一些JavaScript代码转换为TypeScript,但我不知道TypeScript是否支持命名空间。我们有如下的代码:

/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("MyNamespace.Controls.FloatingErrorPane");

MyNamespace.Controls.FloatingErrorPane = function (element)
{
...
}
MyNamespace.Controls.FloatingErrorPane.prototype =
{
...
}

有人知道在TypeScript中是否可以指定包含句点的命名空间吗?我们在C#类中引用相同的名称,例如:

[assembly: WebResource("MyNamespace.FloatingErrorPane.js", "text/javascript")]
ScriptControlDescriptor descriptor = new ScriptControlDescriptor("MyNamspace.Controls.Floating

"

ErrorPane

",这是您的客户端ID。

你在 .prototype 后面留下了什么吗?或者你是想继承一个超类吗?(如果想要继承一个超类,就像 @Sohnee 所说的那样,只需要添加 export class FloatingErrorPane extends YourSuperClassHere { < -- 添加这个 extends 部分。 - Mark Pieszak - Trilon.io
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 {

        }
    }
}

1
你不必嵌套模块。你可以直接指定:module MyNamespace.Controls { ... } - BSick7
好的观察 - 很棒。 - Fenton

0

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

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

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

或者你可以使用Sohnee所示的语法,连续声明模块。不过,你不能直接这样定义一个类或函数。所以这种方式是无效的:

MyNamespace.Controls.FloatingErrorPane = function() { ... }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接