Почему Typescript использует ключевое слово «export», чтобы сделать классы и интерфейсы общедоступными?

Работая с Typescript, я понял, что мои классы в модулях (используемых в качестве пространств имен) не были доступны другим классам, пока я не написалexport ключевое слово перед ними, например:

module some.namespace.here
{
   export class SomeClass{..}
}

Так что теперь я могу использовать приведенный выше код следующим образом:

var someVar = new some.namespace.here.SomeClass();

Однако мне было просто интересно, почему это ключевое слово используется, а не простоpublic ключевое слово, которое используется на уровне метода для обозначения того, что метод или свойство должны быть доступны извне. Так почему бы просто не использовать этот же механизм, чтобы сделать классы, интерфейсы и т. Д. Внешне видимыми?

Это дало бы полученный код наподобие:

module some.namespace.here
{
   public class SomeClass{..}
}

Ответы на вопрос(2)

Решение Вопроса

export соответствует планам для ECMAScript. Вы можете утверждать, что «они должны были использовать« экспорт »вместо« публичный », но помимо того, что« экспорт / частный / защищенный »- это плохо подобранный набор модификаторов доступа, я полагаю, что между этими двумя причинами есть небольшая разница, объясняющая это ,

В TypeScript пометка члена класса какpublic или жеprivate не влияет на сгенерированный JavaScript. Это просто инструмент времени разработки / компиляции, который вы можете использовать, чтобы запретить вашему коду TypeScript доступ к вещам, к которым он не должен.

Сexport ключевое слово, JavaScript добавляет строку для добавления экспортируемого элемента в модуль. В вашем примере:here.SomeClass = SomeClass;.

Так что концептуально, видимость как контролируетсяpublic а такжеprivate только для инструментов, в то время какexport Ключевое слово изменяет вывод.

 Kent Aguilar15 нояб. 2016 г., 08:21
Спасибо за это. Спасает меня, таскание за волосы.
 Shweta21 февр. 2019 г., 17:14
написание экспорта обязательно в машинописном коде?
 Grofit02 апр. 2013 г., 12:28
Спасибо за информацию, я полагаю, что решение было, как вы говорите, избегать проверки контекста ключевого слова, что является позором, так как кажется, что это что-то, что сбивает с толку нескольких человек и действительно не имеет логической разницы в поведении. то, как вы ожидаете, что общественность будет действовать, просто делает их реализацию проще.

export уже означает две разные вещи (в зависимости от того, находится ли он на верхнем уровне или нет); делая это означает, что треть, вероятно, хуже, чем добавлениеpublic/privateЭто определенно не должно облегчать реализацию; дополнительная сложностьpublic противexport тривиально Мы уже поменяли ключевые слова в куче; это не трудно.Видимость по умолчанию для членов классадолжен быть публичным, чтобы соответствовать предложению класса ES6, поэтому нам нужно ключевое слово для обозначения «не публично». Нет подходящего антонима дляexport (unexport??), такprivate это логичный выбор. Когда у вас естьprivateбыло бы несколько безумно не выбиратьpublic как его коллегаИспользованиеexport изменить видимость во внутренних модулях - наилучшее выравнивание с модулями ES6
 Fenton04 апр. 2013 г., 10:11
Я редактирую свое дерзкое утверждение о простоте реализации и предлагаю +1 в качестве извинения :)
 Grofit02 апр. 2013 г., 18:41
спасибо за дополнительную информацию, я полностью согласен с тем, что публичный / частный пользователь находится на уровне участника, я просто счел странным, что этого недостаточно для всех уровней доступа. Однако это личное мнение, а ключевое слово - это ключевое слово, просто хотелось узнать больше.
 Ryan Cavanaugh06 июн. 2016 г., 16:19
Как бы с помощьюimport указать "это значениене экспортируется"подходящее использование ключевого слова?
 Adam Diament06 июн. 2016 г., 16:13
Я согласен с тем, что вы говорите, но я не согласен с утверждением «Нет подходящего антонима для экспорта» - «импорт» - это антоним, и именно это использует TypeScript, когда вы определяете экспортируемый класс, тогда вы импортировать его в другие файлыexport class User { name: string } Другой файл:import {User} from ""./the_file_path_to_the_user_class; см. раздел 3.3 документации по nativescript здесьdocs.nativescript.org/angular/tutorial/ng-chapter-3
 rsp21 мая 2018 г., 21:06
«Не существует подходящего антонима для экспорта (не экспортировать ??)» - подходящим антонимом для экспорта должно быть эмбарго.

Ваш ответ на вопрос