Переход пространств имен / контейнеров модулей с одинаковыми именами вызывает конфликт - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь перевести некоторый код, который был неправильно распределен по пространствам имен, в его собственное пространство имен без потери текущей функциональности (во время перехода).

Оригинальный код:

// (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.Login предполагается, что компилятор находится в General (старом) модуле / пространстве имен, а не в Admin.Dialogs (новом), объявленном выше. Есть ли какая-то магия, которую я мог бы использовать, чтобы заставить это работать?

1 Ответ

0 голосов
/ 05 ноября 2018

Я действительно решил это, когда писал «Квестон», но я подумал, что могут быть и другие лучшие способы, или это может помочь кому-то, у кого такие же проблемы, поэтому вот мой ответ. Поскольку мне нужно снова дотронуться до этого файла после завершения перехода, я просто добавил еще один промежуточный модуль для разрешения конфликта имен (хак, но промежуточный модуль тоже будет удален, так что ничего страшного).

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...