使用命名空间扩展类、函数和枚举

使用命名空间扩展类

我们可以使用 namespace 来扩展类,用于表示内部类。

  1. class Person {
  2. label: Person.PersonInfo;
  3. }
  4. // PersonInfo 为 Person 的内部类
  5. namespace Person {
  6. // 为了让 PersonInfo 可被访问,这里需要用 export 导出
  7. export class PersonInfo {}
  8. }

使用命名空间扩展函数

我们也可以使用 namespace 来扩展函数

function sayHi(name: string): string {
  return sayHi.pre + name + sayHi.next;
}
// 为 sayHi 函数扩展了 pre 和 next 属性
namespace sayHi {
  export let pre = "Hello,";
  export let next = "nice to meet you!";
}

使用命名空间扩展枚举类型

// demo 出处:https://www.typescriptlang.org/docs/handbook/declaration-merging.html
enum Color {
  red = 1,
  green = 2,
  blue = 4
}
// 为枚举类型 Color 扩展了 mixColor 方法
namespace Color {
  export function mixColor(colorName: string) {
    if (colorName == "yellow") {
      return Color.red + Color.green;
    } else if (colorName == "white") {
      return Color.red + Color.green + Color.blue;
    } else if (colorName == "magenta") {
      return Color.red + Color.blue;
    } else if (colorName == "cyan") {
      return Color.green + Color.blue;
    }
  }
}