TypeScript静态成员与名称空间的名称空间

时间:2017-11-04 01:05:28

标签: 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;

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

1 个答案:

答案 0 :(得分:2)

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

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

  • 如果你需要一个创建并返回类定义的函数(as described for example here,模拟静态泛型成员或添加一个mixin),那么命名空间将不起作用 - 你可以'在函数中有命名空间。