带有静态成员的 class 和打字稿中的 namespace/module 之间的区别
Differences between a class with static members and a namespace/module in typescript
有很多关于如何以及何时使用静态 classes 以及如何在打字稿中实现真正的静态 class 的讨论。但是我还没有找到任何关于 class 和 namespace/module.
之间的区别的任何解释,只有静态成员与不可用的构造函数配对
它们如何影响全局命名空间,内存和使用有何不同?
因为在我看来和官方文档所说的那样,通过使用命名空间构造来实现静态 class 的功能会更容易。它比使用真正的 class.
代码更少,也更容易
您可以随时查看编译后的 javascript 输出以了解差异。命名空间是一个对象,它将与其他同名命名空间合并。
namespace A{
export function b(){
}
}
javascript 输出:
var A;
(function (A) {
function b() {
}
A.b = b;
})(A || (A = {}));
一个class是函数,静态成员是函数的属性。
class A{
public static b(){
}
}
javascript 输出:
var A = /** @class */ (function () {
function A() {
}
A.b = function () {
};
return A;
}());
命名空间和 class 都将在全局命名空间中占用相同的名称 "A"。从客户端的角度来看,访问静态 class 成员或命名空间内的函数没有区别:
A.b();
就我个人而言,我不使用静态 class 成员或命名空间,我总是在模块内的顶层定义函数和变量,并使用不同的模块来对不同的函数进行分组。
打字稿主页有一个很好的主题:https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html
有很多关于如何以及何时使用静态 classes 以及如何在打字稿中实现真正的静态 class 的讨论。但是我还没有找到任何关于 class 和 namespace/module.
之间的区别的任何解释,只有静态成员与不可用的构造函数配对它们如何影响全局命名空间,内存和使用有何不同?
因为在我看来和官方文档所说的那样,通过使用命名空间构造来实现静态 class 的功能会更容易。它比使用真正的 class.
代码更少,也更容易您可以随时查看编译后的 javascript 输出以了解差异。命名空间是一个对象,它将与其他同名命名空间合并。
namespace A{
export function b(){
}
}
javascript 输出:
var A;
(function (A) {
function b() {
}
A.b = b;
})(A || (A = {}));
一个class是函数,静态成员是函数的属性。
class A{
public static b(){
}
}
javascript 输出:
var A = /** @class */ (function () {
function A() {
}
A.b = function () {
};
return A;
}());
命名空间和 class 都将在全局命名空间中占用相同的名称 "A"。从客户端的角度来看,访问静态 class 成员或命名空间内的函数没有区别:
A.b();
就我个人而言,我不使用静态 class 成员或命名空间,我总是在模块内的顶层定义函数和变量,并使用不同的模块来对不同的函数进行分组。 打字稿主页有一个很好的主题:https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html