TypeScript 导出-导入约定

TypeScript export-import conventions

与 Java(和其他语言)相比,TypeScript 为您提供了多种导出和导入内容的方法(classes、函数等)。
例如,每个文件可以 export 多个 classes、常量、函数等。
您还可以为每个文件定义 1 个默认导出。
另一方面,您可以 import 仅默认 export,使用别名导入所有内容或导入给定的内容。
来自 Java,我想知道是否有任何约定,尤其是关于 constants 和 functions。
假设我有一个 util 文件,其中包含很多 function。在 Java 中,我会用 class Util 创建一个 File Util.java,其中包含所有 static function
TypeScript 我有以下可能性:

  1. 导出每个函数并使用 import * as Util 导入它。
  2. static function 创建一个 class Util 并仅导出这个 class。

在这两种情况下,我都可以使用 Util.functionName() 调用函数,就像在 java 中一样。

另一种情况是 class 有几个 constant
例如,我有一个带有字段 typeclass Car。可用的 type 也有常量,如 TYPE_SUVTYPE_SPORT 等。

同样,我可以将它们定义为 "top-level" 常量并导出它们和 class Car。但我也可以在 Car-class 中将它们定义为 public static readonly 并仅导出 class。
使用第一种方法,如果我需要其他文件中的所有常量,我会有一个非常大的 import 语句。另外 sub-classes 不会 "inherit" 那些常量。
但是使用 readonly 而不是 const 对我来说感觉有点奇怪......

所以我一直在寻找某种约定,但没有找到太多。
我只找到了一些提示,例如 this

那么,关于 TypeScript 中的导出和导入,是否有任何指南可以解决所解释的问题?我也在寻找关于工具集成(重构、自动导入、组织导入等)的最佳方法。

谢谢。

(尽管在选择一个方面有 objective 个因素,但恐怕这会有点基于意见)

  1. Export every single function and import it using import * as Util.
  2. Create a class Util with static functions and export only this class.

我更喜欢数字 1),因为 2) 没有带来任何好处,可能会导致有人无缘无故地实例化 Util class(与 Java 相反,这不能被阻止)。

I can define them as "top-level" constants and export them and the class Car. But I can also define them as public static readonly inside the Car-class and export that class only.

关于常量,readonly 修饰符仅在编译时适用。所以作为 class 属性,它们仍然可以在运行时修改。因此,我更愿意将它们设为模块(文件)中的顶级常量

Basarat 的优秀手册也是我的 "reference",我分享他对默认导出的看法,默认导出除了混淆之外不会带来太多,因为命名导出也可以在导入时重命名,例如

import { OriginalName as MyPreferredName}  from './OriginalName'