class - TypeScript 静态成员与带有类名的命名空间

标签 class typescript module namespaces

在 TypeScript 中,我一直将非实例变量从我的类中分离出来,并放入与类同名的命名空间中。例如:

class Person
{
    age: number;

    constructor(age: number)
    {
        this.age = age;
    }
}

namespace Person
{
    export let numberOfFingers: number = 10;
}

export default Person;

与此相反:

class Person
{
    static numberOfFingers: number = 10;

    age: number;

    constructor(age: number)
    {
        this.age = age;
    }
}

export default Person;

这两种方法有什么好处吗?

最佳答案

就类型检查和代码生成而言,这两种方法产生的结果完全相同。我可以提供两个支持静态成员的不太有力的论据:

  • 这是最明显的事情,它不需要语言高级部分的知识 (declaration merging) 来理解代码

  • 如果您需要创建和返回类定义的函数(as described for example here,模拟静态泛型成员或添加混入),那么 namespace 将不起作用 - 您不能在内部使用 namespace 一个函数。

关于class - TypeScript 静态成员与带有类名的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106340/

相关文章:

angular - 如何使用 Protractor typescript 在具有跨度的按钮上单击具有相似元素详细信息的元素

dynamic - elixir 动态模块调用

java - 类和对象的基础知识 : Java

class - Common Lisp 类型与类的区别

java - 从另一个类访问和更改 jTextField 中的文本

java - 如何从 Java 中的另一个类获取变量?

javascript - 来自有效 JavaScript 的 TypeScript 错误

javascript - RxJS 行为主题 : return current value or get a new one based on condition

ruby - 由模块中定义的另一个覆盖方法

python - 从另一个模块中导入一个模块