网站搜索

javascript - 在 typescript 中有没有类似 C# 的 "using" 的功能?


有没有办法让我在下面的 TypeScript 代码中更容易调用我的提示。这里是我编写提示的地方:

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

}

这里是我调用它的一个小示例片段:

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

}

问题是调用警报的字符串太长了。有没有什么方法可以像 C# 中的“using”那样,不必指定“Admin.Shared.Alerts”?

答案#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”这样的命名空间,就说明存在问题,因为这些词无法描述其中的代码可能做什么。好的名称应该是“Messaging”“Alerts”“Payments”,你可以立即知道里面包含的内容类型。

所以推荐的第一点是移除“Shared”命名空间。

module Admin.Alerts {

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

.\Admin\Alerts.ts

module Alerts {

你会使用以下方式导入模块

import alerts = module('.\Admin\Alerts.ts');

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

在一个网页应用中,你会使用模块加载器,比如 require.js 来为你处理所有加载,所以不会增加太多额外工作,你会使用一个标志告诉编译器为你创建代码...

tsc --module commonjs Alerts.ts