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

时间:2018-11-05 20:43:13

标签: typescript namespaces

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

原始代码:

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

最终过渡后:

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

不过,我需要通过在一个名称空间/模块中对对象进行 aliasing 来保持某些当前功能正常运行,但是由于命名冲突,编译器(TypeScript 2.3)并不满意(它假定因为我没有指定根名称空间,所以它使用了当前的根名称空间:

namespace Admin {
  export module Dialogs{
    export class Login {
    }
  }
}

module General.Admin.Dialogs {
  export var LoginDialog = Admin.Dialogs.Login;
}
编译器假定

Admin.Dialogs.Login位于General(旧)模块/命名空间中,而不是上面声明的Admin.Dialogs(新)中。有什么魔术可以用来使它起作用吗?

1 个答案:

答案 0 :(得分:0)

我在编写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;
}