我试图编写一个简化的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>
希望我只是遗漏了一些明显而简单的东西。
感谢。
答案 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;
}
}
}