TypeScript:使用class作为模块

时间:2015-05-25 16:49:00

标签: module typescript

无法添加类本地接口和类型声明,如下所示:

class Foo {
  interface Bar {}
  private bar: Bar;
}

到目前为止,我一直把所有东西放在一个模块中:

module Foo {
  export interface Bar {}
  export class Foo {
    private bar: Bar;
  }
}

然而,我最近发现你可以创建课程/模块" hybrids"可以这么说。

class Foo {
  private bar: Foo.Bar;
}

module Foo {
  export interface Bar {}
}

编译器不抱怨这一点,类型检查器似乎做的一切都正确。这是一个坏主意吗?它将来会破裂吗?

2 个答案:

答案 0 :(得分:2)

文档中概述了此语言功能:

Declaration Merging: Merging Modules with Classes, Functions, and Enums

考虑到它在文档中已经概述并且这种模式相当普遍(特别是在现有的JavaScript库中),我认为可以说这种语言功能仍然存在。

答案 1 :(得分:1)

这是一个名为“声明合并”的well-documented功能,因此预计会稳定运行一段时间。

具体来说,模块中可以生成代码的任何内容都将成为类的静态成员,并且接口不会生成代码,因此无论它们是否存在于类中都无关紧要。