声明合并是指编译器会把程序多个地方具有相同名称的声明合并为一个声明。
好处:可以把程序中散落各处的声明合并在一起。比如:在程序中在多个地方定义了同一个名称的接口,那么在使用接口的时候就会对这个多处的定义同时具有感知能力,那么通过声明合并,就会避免对接口成员的遗漏。

一、接口的声明合并

  1. interface A {
  2. x: number;
  3. }
  4. interface A {
  5. y: number;
  6. }
  7. // 如果该接口是全局下的,就是不在同一个文件中,也会发生接口声明合并
  8. let a: A = {
  9. x: 1,
  10. y: 2
  11. }

二、命名空间之间的声明合并

在命名空间中,导出的成员不能重复定义。

三、命名空间和函数之间的声明合并

  1. function Lib() {}
  2. namespace Lib {
  3. export let version = '1.0'
  4. }
  5. console.log(Lib.version)

四、命名空间和类之间的声明合并

  1. class C {}
  2. namespace C {
  3. export let state = 1;
  4. }
  5. console.log(C.state)

五、命名空间和枚举进行声明合并

  1. enum Color {
  2. Red,
  3. Yellow,
  4. Bule,
  5. }
  6. namespace Color {
  7. export function mix() {}
  8. }
  9. // 枚举增加了一个mix方法
  10. console.log(Color)

注意:命名空间在于函数进行合并时,或者与类进行合并时,一定要放在函数定义的后面,或者是类的后面。
枚举是没有要求的。