【问题标题】:Does TypeScript support class declaration for a namespaced class?TypeScript 是否支持命名空间类的类声明?
【发布时间】:2016-04-27 01:25:55
【问题描述】:

我正在将 JavaScript 代码转换为 TypeScript,并坚持使用转换类定义的最佳方式。

它们是从 Marionette 扩展而来的,并且类名是命名空间的。例如,此 JavaScript 使用 'xyz' 命名空间:

xyz.Marionette.AppRouter = Marionette.AppRouter.extend({
    instance_name: "AppRouter",

     functionName: function(options) {
     }
});

我尝试在 TypeScript 中创建此类等效命令:

class xyz.Marionette.AppRouter extends Marionette.AppRouter {

但似乎不支持这种语法。

是否可以在 TypeScript 中使用命名空间声明一个类?

下面的答案(到目前为止)很有帮助,但我仍然不知道如何表达这个定义,或者即使有可能。

【问题讨论】:

    标签: typescript marionette


    【解决方案1】:

    类名Space.Marionette.AppRouter 扩展 Marionette.AppRouter {

    声明命名空间和然后类:

    namespace nameSpace.Marionette {
        export class AppRouter {
    
        }
    }
    

    【讨论】:

    • 谢谢,效果很好!尽管就扩展而言,我仍然不完全确定如何定义类。它是否进入导出类?还是在命名空间块下?两者都是生成的 TypeScript 错误。提前谢谢你。
    【解决方案2】:

    我尝试对此进行模拟,但在引用基本 AppRouter 时遇到问题,因为命名空间相同。如果我在第一个命名空间中添加“base”的限定符,它会起作用..

    namespace base.Marionette {
    
        export class AppRouter {
    
            Foo() {
                return "Hello";
            }
        }
    }
    
    namespace nameSpace.Marionette {
    
        export class AppRouter2 extends base.Marionette.AppRouter {
    
            Bar() {
                var hello = this.Foo();
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的帮助。我仍然很难理解为什么我不能只用 TypeScript 写这个:class nameSpace.Marionette.AppRouter extends Marionette.AppRouter { instance_name: string; });我错过了什么吗?
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2013-03-05
    • 2019-02-05
    • 1970-01-01
    • 2011-06-14
    • 2020-07-20
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多