【发布时间】:2018-10-15 16:14:37
【问题描述】:
下一个示例尝试重载命名空间 N,但不幸的是编译器抱怨 A 和 B 都不是它的导出成员。
namespace N
{
export const A = 'hello';
export const B = 'world';
}
type N = N.A | N.B;
const a: N = N.A;
const b: N = N.B;
console.log(a, b);
尽管如此,运行编译后的代码会得到以下预期输出:
hello world
所以问题显然是:为什么编译器会抱怨?投诉合理吗?
注意1:我使用的编译器版本是
3.1.1
注意2:我知道上面可以写成
enum,但是请记住,这是我正在尝试的一个过于简单的例子实现,因此这只是说明问题的最低限度。
【问题讨论】:
-
您可以使用
type N = (typeof N)[keyof typeof N]将命名空间的导出值捕获为联合类型。 -
@Aaron 这是一个很好的观点,但是当我把它放在 Titian Cernicova-Dragomir 的回答下面的 cmets 上时,这个表达式可能有效,但它不能解释为什么必须在第一个使用
typeof地点!
标签: typescript namespaces export overloading