【问题标题】:Can an imported merged namespace be exported in Typescript?可以在 Typescript 中导出导入的合并命名空间吗?
【发布时间】:2019-11-17 06:59:56
【问题描述】:

我有一个库,里面有很多 merged declarations,比如:

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
}

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

据我所知,这与this questionthis question 的情况不同。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    可以使用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 项目中的 the original answer

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2018-01-05
      • 2016-12-19
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多