angular/angular#16583 (comment)
angular/angular#18018 (comment)
The prefixed symbols are indeed private (see documentation). The must be exported because they are being used by the code generated by the AOT compiler.
/x-module/index.ts
export * from './x-module';
/x-module/x-module.ts
export class XModule {}
/index.ts
export * from './root-module';
export * from './x-module';
/root-module.ts
//bad
import { XModule } from './x-module/x-module';
export class RootModule {}
/x-module/index.ts
export * from './x-module';
/x-module/x-module.ts
export class XModule {}
/index.ts
export * from './root-module';
export * from './x-module';
/root-module.ts
//good
import { XModule } from './x-module';
export class RootModule {}