【问题标题】:Is there some feature like C# "using" in typescript?打字稿中是否有诸如 C#“使用”之类的功能?
【发布时间】:2012-11-03 19:50:57
【问题描述】:

有没有一种方法可以更轻松地在下面的打字稿代码中调用我的警报。这是我的警报编码的地方:

module Admin.Shared.Alerts {
    export class alerts {
        static mvcOnFailure(message: string) {
            dialog.alertWin("Internal Application Error", message);
        }
    }

}

这是我称之为的小 sn-p 示例:

module Admin.MyAccount.Access {
    export function ajaxDone(data: string, textStatus: string, jqXHR: JQueryXHR) {       
        Admin.Shared.Alerts.alerts.mvcOnFailure("x");
    }

}

问题是有这么长的字符串来调用警报。有什么方法可以让我在 C# 中执行类似“使用”的操作,而不必指定“Admin.Shared.Alerts”?

【问题讨论】:

  • 当然:var Alerts = Admin.Shared.Alerts

标签: javascript typescript


【解决方案1】:

确实有。我不会推荐它,但您正在寻找的是 with 声明:

module Admin.MyAccount.Access {
    export function ajaxDone(data: string, textStatus: string, jqXHR: JQueryXHR) {       
        with (Admin.Shared.Alerts) {
            alerts.mvcOnFailure("x");
        }
    }
}

注意:我宁愿使用@Richard 在他对您的问题的评论中提供的解决方案。

【讨论】:

    【解决方案2】:

    在这方面我有两个建议给你。首先是你重新考虑你的模块结构。一旦您看到诸如“Common”、“Shared”或“Core”之类的命名空间,它就会告诉您存在问题,因为这些不是描述内部代码可能执行的操作的词。好的名称是“消息”、“警报”、“付款” - 您可以立即知道您会在其中找到哪些内容。

    所以建议 1 是删除“共享”命名空间。

    module Admin.Alerts {
    

    如果您正在构建大型 TypeScript 程序,您可能需要遵循 CommonJS 应用程序中常用的模块模式。您使用简单的模块名称,但将它们嵌套在文件夹中:

    .\Admin\Alerts.ts

    module Alerts {
    

    您可以使用

    导入模块
    import alerts = module('.\Admin\Alerts.ts');
    

    然后在 alerts 名称下的代码中使用它。

    在 Web 应用程序中,您将使用模块加载器(例如 requires.js)来为您处理所有加载,因此不会有太多额外的工作,并且您会告诉编译器使用一面旗帜……

    tsc --module commonjs Alerts.ts
    

    【讨论】:

    • 附带说明 - 我在三月份更详细地写过关于“通用”命名空间问题的文章:stevefenton.co.uk/Content/Blog/Date/201203/Blog/…
    • 浏览器已经可以加载 JavaScript,为什么还要使用模块加载器?
    • 模块加载器只是一种选择。捆绑在浏览器中更为常见 - 预先大打,然后缓存。模块加载器让您可以在不影响页面加载的情况下进行较小的点击,并缓存单个脚本。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2015-07-12
    • 2021-06-30
    • 2016-06-15
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多