javascript - 了解 TypeScript 封装

标签 javascript typescript

这就是我组织 TypeScript 文件的方式:

MBZ (Folder)
    Utilities.ts
    Controls (Folder)
        Designer.ts
        Form.Ts

来自 C#,我的方法是根据文件夹结构创建命名空间。因此,MBZ 文件夹中的所有内容都将具有命名空间“MBZ”,而 Controls 文件夹中的所有内容将具有命名空间“MBZ.Controls”。这允许 Controls 文件夹中的所有内容隐式引用其任何先前文件夹中的任何内容。

因此,这是上述文件的示例:

实用程序.ts

namespace MBZ
{
    export function ProcessSelection()
    {
        // A Common Utility available to anything in the MBZ.* namespace
    }
}

设计师.ts

namespace MBZ.Controls
{
    export module Designer
    {
        export function Initialize()
        {
            // Initialize Control
        }

        export function OnSubmit()
        {
            // Calls common utility
            ProcessSelection();
        }
    }
}

表单.ts

namespace MBZ.Controls
{
    export module Form
    {
        export function Initialize()
        {
            // Initialize Control
        }

        export function OnSubmit()
        {
            // Calls common utility
            ProcessSelection();
        }
    }
}

问题

根据我所读到的所有内容,人们说模块是可行的方法,您应该在文件中显式导入所需的每个模块。这对我来说似乎很奇怪 - 使用上面的方法,你永远不必真正明确地引用任何东西,除非你指的是不同命名空间链中的东西(就像在 C# 中一样)。

所以我的问题是:上述方法有什么不好?

最佳答案

So my question is: what is so bad about the above approach?

因为C#有main的概念。在 JavaScript/TypeScript 中不是这样。代码在解析时开始执行。因此,不使用模块意味着您的代码可能会以脆弱的方式中断。

更多

https://basarat.gitbooks.io/typescript/content/docs/tips/outFile.html

关于javascript - 了解 TypeScript 封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39690405/

相关文章:

javascript - Angular JS - 如何按属性值设置过滤器?

javascript - 什么时候应该在花括号后使用分号?

html - 自定义库组件不是已知元素,但应用程序编译并运行

angular - 使用 [(ngModel)] 生成选择菜单,而不使用 *ngFor

Typescript 忽略 null 或 undefined 作为函数返回的可能性

javascript - jQuery .ready() 错误?

javascript - 如何防止用户在输入字段中输入无效字符

javascript - Sproutcore数据源: How should a created record be saved in the datasource?

javascript - 如何通过这个访问方法?

typescript - 如何定义类型A,其中类型A可以是除类型B之外的任何类型?