具有静态成员的类与typescript中的命名空间/模块之间的差异

时间:2017-11-14 12:13:54

标签: typescript2.0

关于如何以及何时使用静态类以及如何在typescript中实现真正的静态类,有很多讨论。但是我没有找到任何关于只有静态成员与不可用构造函数和命名空间/模块配对的类之间的差异的解释。

它们如何影响全局命名空间以及内存和用法的区别是什么?

因为在我看来,官方文档中说的是,通过使用命名空间构造来实现静态类的功能会更容易。使用真正的类代码更少,更容易。

1 个答案:

答案 0 :(得分:2)

您可以随时查看已编译的javascript输出以查看差异。命名空间是一个将与其他具有相同名称的命名空间合并的对象。

namespace A{
    export function b(){

    }
}

javascript输出:

var A;
(function (A) {
    function b() {
    }
    A.b = b;
})(A || (A = {}));

类是函数,静态成员是函数的属性。

class A{
    public static b(){

    }
}

javascript输出:

var A = /** @class */ (function () {
    function A() {
    }
    A.b = function () {
    };
    return A;
}());

命名空间和类都将在全局命名空间中占用相同的名称“A”。从客户端的角度来看,访问静态类成员或命名空间内的函数没有区别:

A.b();

就个人而言,我不使用静态类成员或命名空间,我总是在模块内的顶层定义函数和变量,并使用不同的模块来分组不同的函数。 打字稿主页有一个很好的主题:https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html