TypeScript 从类 + 命名空间拆分接口

Posted

技术标签:

【中文标题】TypeScript 从类 + 命名空间拆分接口【英文标题】:TypeScript split interface from class + namespace 【发布时间】: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' 中的单个声明必须全部导出或全部本地。”我想这意味着我已经导入了命名空间,但我没有导出它(尽管我希望导出类应该导出合并的实体)。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

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

import  C, IC  from './interfaces'

class C 
  foo (): Foo  ... 


export  C 

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

【讨论】:

hmm... 但不能完全正常工作。如果第三个模块从 foo.ts 导入 C,它只会导入类,而不是命名空间 (?!)。暂时离开,但会接受更好的方式。

以上是关于TypeScript 从类 + 命名空间拆分接口的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript:如何在命名空间中使用内部接口

TypeScript:用其他东西替换命名空间

TypeScript躬行记——命名空间

从类引用中获取类命名空间和名称,而不更改我的类

TypeScript 在命名空间下扩展 JQuery

Typescript - 如何访问通过命名空间声明的类?