javascript - Typescript - 具有静态成员的类与具有常量成员的命名空间的区别

标签 javascript typescript memory

如果我在 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/

相关文章:

javascript - Jquery slider 在事件更改时更新值

javascript - componentDidMount 或 componentWillMount 我需要使用哪一个

node.js - 类型 'virtual' 上不存在属性 'typeof Schema'

linux - Golang os/exec,实时内存使用

javascript - 使用 lodash 重新映射属性名称和值

javascript - 如果代码正确,按钮单击重定向

typescript - 使用 Vue 3 Composition API 创建全局商店

javascript - knockout 观察和表现

c - 如果堆栈变量被 malloc 重新分配,会发生什么情况?

memory - 垃圾收集语言是否可以编译为非垃圾收集语言,而不在运行时包含垃圾收集器?