我有一个从一个文件导出的接口,该接口由其他文件中定义的类实现。
// 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
)导入。还有另一种方法吗?