TypeScript教程之九:namespace命名空间


由微软推出的TypeScript自从一推出就广受关注,现在无论开发前端React/Vue,还是后端API,很多项目中都广泛接受了TypeScript。下面介绍TS中命名空间的使用。

TypeScript

命名空间

为什么需要命名空间?其主要目的就是解决名称冲突。比如,在一个TS文件中声明了类Dog,然后在第二个TS文件中又声明了一个类Dog,那么,当使用new Dog()创建Dog类实例的时候,究竟是想用哪一个类呢?这就出现了二义性。因此,namespace就诞生了。通过namespace,可以完美的解决这个问题。这和Java中的package作用一样。同时,namespace也能有效的组织代码,把相关类放在同一个namespace中,便于管理和维护。

看一下这个例子:

namespace m06 {
    export class Dog {
        speak() {
            console.log("Woaf Woaf");
        }
    }
}

const d = new m06.Dog();
d.speak();

如果使用tsc把上面TS代码编译成JS代码,就可以看到其实所谓命名空间,就是把其中的类/函数定义在另一个函数内部了:

var m06;
(function (m06) {
    var Dog = /** @class */ (function () {
        function Dog() {
        }
        Dog.prototype.speak = function () {
            console.log("Woaf Woaf");
        };
        return Dog;
    }());
    m06.Dog = Dog;
})(m06 || (m06 = {}));
var d = new m06.Dog();
d.speak();

这里需要注意的是,命名空间里的类一定要暴露,否则外面无法访问。

命名空间的嵌套

命名空间是可以嵌套的,比如:

namespace m06 {
    export namespace m061 {
        export class Dog {
            speak() {
                console.log("Woaf Woaf");
            }
        }
    }
}

const d = new m06.m061.Dog();
d.speak();

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !
  目录