使用来自另一个全局模块但具有类似子模块的类型

时间:2016-10-28 13:54:24

标签: typescript typescript-typings

我在一个项目上工作,我需要为两个不同的Java库导出输入(我有我的理由),其类层次结构如此。

libName `-namespace1 `-Class1 // full class Name: (libName.namespace1.Class1) -Class2 // full class Name: (libName.namespace1.Class2) 另一个:

org `-libName `namespace123 `-Class1 // full class Name: (org.libName.namespace123) `public method1(param0: libName.namespace1.Class1): void

base.d.ts:

declare module libName {
  export module namespace1 {
    export class Class1 {
      /* omitted for brevity */
    }
    export class Class2 {
      /* omitted for brevity */    
    }
  }
}

declare module org {
  export module libName {
    export class Class1 {
     public method1(param0: libName.namespace1.Class1): void
    }
  }
}

在这种情况下,尝试编译上面的内容将导致error TS2305: Module 'org.libName' has no exported member 'namespace1',因为TSC假设我打算使用在同一模块中声明的模块。

有没有办法解决这个限制?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将它们包装在一个共同的父级中:

declare module wrapper {
  export module libName {
    export module namespace1 {
      export class Class1 {
        /* omitted for brevity */
      }
      export class Class2 {
        /* omitted for brevity */
      }
    }
  }

  export module org {
    export module libName {
      export class Class1 {
        public method1(param0: wrapper.libName.namespace1.Class1): void
      }
    }
  }
}