导入的合并命名空间是否可以在Typescript中导出



我有一个库,其中包含许多合并声明,如:

export class Foo {...}
export namespace Foo {
export class Bar {...}
...
}
export default Foo

合并后的命名空间通常定义内部类、特定于类的错误等。

我想在我自己的图书馆里重新出口其中一些申报单。我目前正在尝试这样做:

import FooExt from './library.js'
export namespace Baz {
export type Foo = FooExt
export const Foo = FooExt
...
}

这成功导出了Foo命名空间的值,但没有导出其类型;即:

import {Baz} from './mylib.js'
let x: Baz.Foo.Bar              // Error: Namespace '".../mylib".Baz' has no exported member 'Foo'.
x = new Baz.Foo.Bar             // Ok
if (x instanceof Baz.Foo.Bar) { // Ok
// do something
}

有没有办法导出导入的合并命名空间并保留其类型?

据我所知,这与这个问题和这个问题是不同的。

可以使用export import语法导出命名空间:

import FooExt from './library.js'
export namespace Baz {
export import Foo = FooExt  // <-- exports namespace including types and values
...
// instead of:
//export type Foo = FooExt
//export const Foo = FooExt
}

请参阅TypeScript GitHub项目中的原始答案。

最新更新