有什么建议来构造打字本代码库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

我一直在使用C#多年,并且主要习惯于单文件类型的处理方式。我也喜欢将文件放入子文件夹(对应于C#中的命名空间)。

但现在我正在使用TypeScript构建一个移动Web应用程序,并发现自己以同样的方式构建我的代码。但是,这并不太好:

  • 每个文件都会生成一个模块包装器,因此如果有多个文件具有相同的模块,则输出(捆绑时)会包含大量不必要的代码行。
  • 在其他模块中引用类型不如在C#中那么好,因为必须在模块名称前加上类型名称。

第一点应该是通过编写一个小工具来解决捆绑输出中不必要的模块包装。我想我需要避免使用子模块,只需将所有内容都粘贴到单个模块中,而不管文件系统位置如何。

有没有更好的方法来构建TypeScript代码比我目前正在做/计划还是像上面这样的建议实践?对于喜欢单一责任原则的人来说,有哪些选择值得考虑?

提问于
用户回答回答于

网站

如果你在网站上使用TypeScript,请使用模块来封装完整的独立功能块并将其保存在一个文件中(除非它变得难以管理)。保守“模块a”对“模块b”的内部位有多少访问权限。

将所有生成的JavaScript捆绑并缩小为单个文件。

用以下语句声明你的模块:

module MyModule {
    // ...
}

并使用引用将它们提供给其他代码文件:

///<reference path="MyModule.ts" />

Web应用程序

对于一个网络应用程序,你需要决定如何处理剧本。如果事情会变得轻巧,请把它当作一个网站来对待。如果你要有很多脚本,那么AMD是你的朋友。

借助AMD,你可以使用文件夹结构来组织代码。你的文件是你的模块,所以不要使用module MyModule声明,而是命名你的文件MyModule.ts。然后,你可以使用文件夹和文件结构来组织代码,并根据需要导入模块:

import myModule = module("./Messaging/Async/MyModule");

所以想想import你的using声明 - 除了你需要给它一个名字。

在运行时,你需要注意为你加载模块。RequireJS是这方面的热门选择。

你只需在你的页面上添加一个脚本标记,该标记将加载RequiresJS并告诉它你的顶级模块的名称:

<script data-main="/Messaging/Async/MyModule" src="scripts/require.js"></script>

服务器应用

对于服务器应用程序,几乎肯定会使用CommonJS(例如,由nodejs默认支持)。

它的工作原理与AMD相似(AMD实际上基于CommonJS),除了服务器将为你加载模块,所以你不需要包含模块加载脚本。

用户回答回答于

这是非常主观的,但是为什么值得我们使用模块作为名称空间,因此将相关的类组合在一个文件中,除了我们的viewmodel中我们或多或少坚持一个文件=一个类,就像我们会为C#。

其中一个原因是,在客户端开发中,我们发现自己创建了更多非常小的类和接口(通常每个接口只有两个或三个参数),通常按特定组件或视图的工作方式进行分组,并将它们单个文件似乎更有意义。

扫码关注云+社区