TypeScript系列学习笔记-命名空间namespace

简介:从ECMAScript 2015开始,JS引入了模块的概念。TS也沿用这个概念,但在TS1.5里术语名已经发生了变化。 "内部模块"现在称做"命名空间""外部模块"现在则简称为"模块",这是为了与 ECMAScript 2015里的术语保持一致,(也就是说module X {} 相当于现在推荐的写法 namespace X {})。

注:任何使用 module关键字来声明一个 "内部模块" 的地方都应该使用namespace关键字来替换。

命名空间(namespace)概念:

1.类似C#中的命名空间;

2.使用 namespace 关键字申明,

3.在命名空间中默认成员都是私有 private 的;

4.在命名空间中使用 export 关键字声明公有资源;

5.命名空间支持跨文件分隔;

6.在Node.js/Require.js中使用 require 关键字导入模块;

7.可以使用 import 关键字声明命名空间的别名;

实例代码如下(TS和JS对比):


关键字 interface 声明接口、 implements 实现接口;

外部命名空间:declare namespace 

流行的程序库D3在全局对象d3里定义它的功能。 因为这个库通过一个 <script>标签加载(不是通过模块加载器),它的声明文件使用内部模块来定义它的类型。 为了让TS编译器识别它的类型,我们使用外部命名空间声明。 比如,我们可以像下面这样写: 

declare namespace D3 {
    export interface Selectors {
        select: {
            (selector: string): Selection;
            (element: EventTarget): Selection;
        };
    }

    export interface Event {
        x: number;
        y: number;
    }

    export interface Base extends Selectors {
        event: Event;
    }
}

declare var d3: D3.Base;

关键字 extends  继承;

总结:TS中使用命名空间分离文件,方便维护,类似"作用域",尽管是不同的文件,它们仍是同一个命名空间,并且在使用的时候就如同它们在一个文件中定义的一样。 因为不同文件之间存在依赖关系;

注:关键字public 和 export 的区别:

相同点:1. 都是公开访问(公有,可供外部访问);

不同点:1. 修饰(作用)对象不一样, public 主要用于修饰类(class)中的成员(作用于类内部),而 export 主要修饰类(class)本身; 

TS本质是JS,在html页面引用时,注意按文件顺序引入(<script type="text/javascript" src="xxx.js"></script>),浏览器是按顺序加载文件的,待文件加载完毕再解析html标签文档。

猜你喜欢

转载自blog.csdn.net/chaitsimplelove/article/details/79835833
今日推荐