微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将名称空间与导入的类合并

在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 举报,一经查实,本站将立刻删除。