在命名空间中部分导出typescript模块

时间:2016-03-18 00:11:32

标签: typescript

我试图编写一个简化的API表面,将一堆打字稿模块放在一起(即let asdf = new Root.A.B.C())。

我想将一些导入分成名称空间。我不确定打字稿是否支持这一点,我希望它能做到。类似的东西...

import { C, default as D } from './ModuleA';
import * as B from './ModuleB';

export namespace A {
  export { C, D };
};

export { B };

ModuleB是命名空间的,因为我将所有内容导出为别名B,但我无法对ModuleA进行部分导出,因为您无法导出命名空间。< / p>

希望我只是遗漏了一些明显而简单的东西。

感谢。

2 个答案:

答案 0 :(得分:0)

  

我希望它能。

确实如此。但是export中的export {/*something*/}语法错误。它必须是export something = somethingElse。例如。

import { C as importedC} from './ModuleA';
export namespace A {
  export const C = importedC;
}

答案 1 :(得分:0)

只是为了添加到已接受的答案,这里是一个演示如何从导入的子命名空间中导出通用接口,类类型,类变量(新能),实例和函数的演示模块。请注意,我们正在从ModuleA选择单个导出以导出到我们的A命名空间。

import * as AExports from './ModuleA';

export namespace A {
  export type IGenericInterface<T> = AExports.IGenericInterface<T>;
  export type SomeClass = AExports.SomeClass;
  export var SomeClass = AExports.SomeClass;
  export const Instance = AExports.default;
  export const someFunction = AExports.someFunction;
}

您实际上可以使用import alias保存一些击键,这将导致一行中的类型和变量声明。

import * as AExports from './ModuleA';

export namespace A {
  export import IGenericInterface = AExports.IGenericInterface;
  export import SomeClass = AExports.SomeClass;
  export const Instance = AExports.default;
  export const someFunction = AExports.someFunction;
}

在处理模块扩充时,导入别名是实现此目的的唯一方法。

import * as AExports from './ModuleA';
import * as B from 'ModuleB';

declare module 'ModuleB' {
  namespace Things {
    export namespace A {
      export import SomeClass = AExports.SomeClass;
    }
  }
}