转换具有相同名称的命名空间/模块容器会导致冲突



我正在尝试将一些名称空间不正确的代码转换到它自己的名称空间中,而不会丢失当前的功能(在转换过程中(。

原始代码:

// (org)
module General.Admin.Dialogs {
export class LoginDialog {
// details
}
}

最终过渡后:

// (new)
namespace Admin {
export module Dialogs{
export class Login {
}
}
}

然而,我需要通过在一个命名空间/模块中别名对象来保持当前的一些功能,然而编译器(TypeScript 2.3(因为命名冲突而不高兴(它假设因为我没有指定根命名空间,所以它使用当前的根命名空间:

namespace Admin {
export module Dialogs{
export class Login {
}
}
}
module General.Admin.Dialogs {
export var LoginDialog = Admin.Dialogs.Login;
}

编译器假定Admin.Dialogs.LoginGeneral(旧(模块/命名空间中,而不是在上面声明的Admin.Dialogs(新(中。我有什么魔法可以让它发挥作用吗?

我在编写Quesiton时确实解决了这个问题,但我认为可能还有其他更好的方法,或者这可能会帮助其他有同样困难的人,所以下面是我的答案。由于转换完成后我必须再次接触这个文件,我只是添加了另一个中间模块来解决命名冲突(很难,但中间模块也会被删除,所以没什么大不了的(。

namespace Admin {
export module Dialogs{
export class Login {
}
}
}
module AdminTransition {
export var LoginDialog = Admin.Dialogs.Login
}
module General.Admin.Dialogs {
export var LoginDialog = AdminTransition.LoginDialog;
}

最新更新