我应该更喜欢命名空间还是具有静态函数的类?

Chr*_*s_F 4 typescript

在 TypeScript 中,有两种可能的方法来捆绑和公开一组函数。一种是导出一个只包含公共静态函数的类。另一种方法是创建命名空间,然后从其中导出函数。据我所知,这会在 TypeScript 中产生相同的行为(尽管可能会生成不同的 JavaScript)。是否有一种首选方法,或者它很大程度上取决于个人喜好。

namespace MyCollection {
    export function doSomething(macguffin: any) {
        //todo: implement doSomething
    }
}

export class MyCollection {
    public static doSomething(macguffin: any) {
        //todo: implement doSomething
    }
}
Run Code Online (Sandbox Code Playgroud)

cas*_*ber 5

最好使用模块而不是命名空间或静态类方法。来自关于命名空间和模块的 TypeScript 官方文档页面:

命名空间只是全局命名空间中命名的 JavaScript 对象。[...] 就像所有全局命名空间污染一样,识别组件依赖关系可能很困难,尤其是在大型应用程序中。

[...]

模块提供更好的代码重用、更强的隔离和更好的捆绑工具支持。

[...]

从 ECMAScript 2015 开始,模块是该语言的本机部分,并且应该受到所有兼容引擎实现的支持。因此,对于新项目,模块将是推荐的代码组织机制。