将名称空间与导入的类合并

问题描述

在TypeScript中,您可以像这样合并一个类和一个命名空间:

foo.ts:

class Foo {
  foo() {}
}

namespace Foo {
  export const ANSWER = 42;
}

export default Foo;

consumer.ts:

import Foo from './foo'

const foo = new Foo();
const x = Foo.ANSWER;

如果我们现在尝试重新组织代码,以使类Foo位于其自己的文件中,那么该类如何与命名空间合并?

如果我们这样做:

foo.ts:

export default class Foo {
  foo() {}
}

index.ts:

import Foo from './foo';

namespace Foo {
  export const ANSWER = 42;
}

然后我们在TS2440: Import declaration conflicts with local declaration of 'Foo'行上得到import Foo

到目前为止,我发现的唯一解决方法是:

foo.ts:

export default class Foo {
  foo() {}
}

index.ts:

import _Foo from './foo';

class Foo extends _Foo {}

namespace Foo {
  export const ANSWER = 42;
}

这似乎可行,但是很丑陋,实际上我们不再导出相同的类,而是导出具有相同接口的相同子类。尽管如此,原型还是不一样,等等。

是否有可能在一个文件中定义一个类,然后让另一个文件声明与该类合并的名称空间?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)