如果我在 Typescript 中创建以下命名空间和类,两者之间会有什么区别?两者的内存管理有区别吗?
export namespace TestNamespace {
export const Test = 'TEST';
export const TestFunction = (value:string):boolean => {
return !value || value.length === 0;
}
}
export class TestClass {
static Test = 'TEST';
static TestFunction(value:string): boolean {
return !value || value.length === 0;
}
}
它们都可以用相同的方式调用:
console.log(TestClass.Test);
console.log(TestClass.TestFunction('Test'));
console.log(TestNamespace.Test);
console.log(TestNamespace.TestFunction('Test'));
唯一的区别只是书写方式的偏好吗?
最佳答案
存在一些差异,但它们可能不是特别显着:
它们之间最明显的区别是
TestClass
是构造函数,而TestNamespace
是非函数对象。您可以调用构造函数。你不能调用一个对象。 (您可以通过使其抽象
来最小化这种差异,这样TypeScript编译器就不允许new TestClass
。)如果您的目标是 ES2015+,则编译后的 JavaScript 中的
class
语法将保留class
语法。 (如果您的目标是 ES5 或更早版本,它将被编译为函数。)
不应该有任何显着的内存管理差异。
关于javascript - Typescript - 具有静态成员的类与具有常量成员的命名空间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57883790/