带有静态方法的类与导出函数的打字稿

Clo*_*e24 6 typescript

我一直在尝试对此进行研究,但找不到任何建议。我继承了一个代码库,其中团队使用带有静态方法的类,而不是辅助方法的函数。我从未见过采用这种方法并试图决定是否应该让它们返回并使用它们创建函数。我觉得这很不干净,因为您要导入整个类而不只是要使用的功能,所以导入很膨胀?

一种方法比另一种更好吗?

例如,在我不清楚的情况下:

    export class StringUtil {
      public static alterString(str: string) {
        return alteredString;
      }
    }
Run Code Online (Sandbox Code Playgroud)

    export function alterString(str: string) {
      return alteredString;
    }
Run Code Online (Sandbox Code Playgroud)

然后将这样使用:

import { StringUtil } from '../StringUtil';

getString(str: string) {
  return StringUtil.alterString(str);
}
Run Code Online (Sandbox Code Playgroud)

import { alterString } from '../helper-functions';

getString(str: string) {
  return alterString(str);
}
Run Code Online (Sandbox Code Playgroud)

Jcl*_*gst 6

从功能上讲,这两种实现都将产生相同的结果,唯一的区别是对于静态方法,该函数将附加到类的原型上。如果您实际上不需要这种行为(不太可能需要这样做),我会将静态方法保留为单独的函数,因为这对于摇树和代码拆分更好(除非您有很多静态方法,但是这些只会是次要的收获)。在实践中,我发现静态方法通常仅出于两个原因出现:(1)谁使用过Java编写代码的人;(2)一些IDE发出警告,如果它们不使用实例变量,则应将方法标记为静态。

如果只希望具有为一堆静态方法命名空间的功能,则仍然可以通过导出具有所有附加功能的对象来实现。

  • 我看到这种方法的问题是自动导入功能变得混乱,因为如果不在上下文中,您最终可能会得到没有有意义名称的函数(例如,如果您开始使用“get()”方法使用“get”,您可能会得到很多其他结果,但是使用“HttpUtil.get()”,您可以轻松地自动导入“HttpUtil”,并且可以轻松地使用“get()”自动完成,假设您的编辑器具有自动导入功能) 。**在这种情况下,该类充当命名空间**。缺点是您可能不会从 **treeshaking** 中受益。 (5认同)
  • 读完后我投了赞成票 >>> (1) 写代码的人都习惯了 Java (2认同)