【问题标题】:TypeScript split interface from class + namespaceTypeScript 从类 + 命名空间拆分接口
【发布时间】:2019-03-18 18:37:39
【问题描述】:

在 TypeScript 中,我有一个与命名空间合并的类 (foo.ts):

export class C {
  foo(): Foo { ... }
}
export namespace C {
  type Foo = ...
  ...
}

在准备使用 inversify 时,我想将此类的接口放在不同的文件中。我尝试过这样的事情:

(interfaces.ts)

export interface IC {
  foo (): C.Foo
  ...
}
export namespace C {
  type Foo = ...
}

(foo.ts)

import { C, IC } from './interfaces'

export class C {
  foo (): Foo { ... }
}

但是,编译 foo.ts 给我一个错误:“合并声明 'C' 中的单个声明必须全部导出或全部本地。”我想这意味着我已经导入了命名空间,但我没有导出它(尽管我希望导出类应该导出合并的实体)。我该如何解决这个问题?

【问题讨论】:

    标签: typescript inversion-of-control


    【解决方案1】:

    啊哈——写下我的问题让我得到了答案。 foo.ts 可以改成:

    import { C, IC } from './interfaces'
    
    class C {
      foo (): Foo { ... }
    }
    
    export { C }
    

    需要单独导出似乎很奇怪,但很高兴知道它有效。

    【讨论】:

    • hmm... 但不能完全正常工作。如果第三个模块从 foo.ts 导入 C,它只会导入类,而不是命名空间 (?!)。暂时离开,但会接受更好的方式。
    猜你喜欢
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2017-02-16
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多