无法同时导入和重新导出名称

时间:2019-01-31 18:15:17

标签: typescript

我有一个从一个文件导出的接口,该接口由其他文件中定义的类实现。

// Model.interface.ts
export interface Model {
  ...
}

我想定义一个与接口同名的名称空间(合并的声明),并带有返回那些实现实例的函数。当我输入的接口使用我的函数签名,我得到一个错误:

// Model.namespace.ts
import { Model } from "./Model.interface"; // Just importing.
// ^^^ Individual declarations in merged declaration 'Model'
// must be all exported or all local.

interface Constructor {
  (): Model;
}

export namespace Model {
  export function model(): Constructor {
    return () => ...;
  }
}

我必须重新导出Model,但是当我这样做时,则不会导入名称。 Per the documentation

  

模块通常会扩展其他模块,并部分地暴露其某些功能。重新导出不会将其导入本地,也不会引入局部变量。

// Model.namespace.ts
export { Model } from "./Model.interface"; // Re-exporting now.

interface Constructor {
  (): Model;
  // ^^^ Return type of call signature from exported interface
  // has or is using private name 'Model'.
}

export namespace Model {
  export function model(): Constructor {
    return () => ...;
  }
}

如果我尝试同时执行这两种操作,则会收到与刚导入时相同的错误。看来我拥有的 only 选项是使用其他名称(使用as)导入。还有另一种方法吗?

0 个答案:

没有答案