Какие модификаторы доступа подразумеваются, если они не указаны?


138

Для всех различных концепций, которые поддерживают модификаторы доступа, таких как поля, свойства, методы и классы, какие модификаторы доступа подразумеваются, если они не указаны?


@basarat, я давно не пользовался TypeScript, поэтому трудно вспомнить, как он работает в наши дни! Насколько я помню, ваш ответ выглядел разумным, но я не чувствовал, что он был достаточно авторитетным, чтобы пометить его как правильный. Ваш ответ основан на вашем опыте с языком, или это из информации в спецификациях?
Сэм

на основе спецификации github.com/Microsoft/TypeScript/blob/master/doc/spec.md
Басарат

1
Чтобы прояснить этот вопрос и ответить, в вопросе должна быть указана машинопись, чтобы было понятно. Есть тег машинописного текста, но это единственное указание, что мы не обсуждаем scala, java, C #, C ++, ....
absmiths

Ответы:


216

Все в classэто , publicесли не указано. Все в moduleявляется частным, если exportне используется ключевое слово.


6
Для людей, играющих со стартовым набором. Некоторые из них поставляются с Цлинтом, и это может очень запутать. При появлении этого сообщения установите default access modifier on member/method not allowed флажок, tslint.jsonчтобы разрешить модификатор доступа по умолчанию или подразумеваемый.
Visheshd

1
Можно ли использовать шаг перед переносом для автоматического назначения private?
Qwerty

-4

Я не согласна что

Все в классе общедоступно, если не указано.

Все общедоступно, даже если используется частное. Просто посмотрите на переданный код. Частные аннотированные методы будут доступны общественности. Только транспилирование приведет к ошибкам. Как государственные, так и частные будут преобразованы в<Object>.prototype.funcName


24
Да, это хороший момент. Тем не менее, мой вопрос был, which access modifiers are implied when not specifiedа не can my code be accessed when an access modifier is not specified. Модификаторы доступа - это концепция TypeScript, а не концепция JavaScript. Таким образом, я думаю, что ответ @ basarat касался того, что я имел в виду в вопросе, и представляется правильным в контексте вопроса. Возможно, есть место для недвусмысленной формулировки вопроса и ответа.
Сэм

Именно так работает TS, он скомпилирует ваш код, независимо от того, является ли он «правильным» с точки зрения TS, это относится ко всему в TS без исключения для классов, но главное, если вы уважаете предупреждения TS - вы не будете получать доступ к свойствам, помеченным как частные.
Андрей Богданов

3
Я не могу думать ни о каком языке, где что-то действительно личное. В C # вы можете легко добраться до любого частного поля с помощью отражения. В языках более низкого уровня, таких как C или C ++, вы можете получить доступ к закрытым полям, просто перемещая указатели. Если не считать мер безопасности на уровне операционной системы, таких как DEP и зашифрованная память, модификаторы доступа - это просто предоставляемая компилятором помощь, помогающая писать более качественный код. ...Правильно?
pbarranis

@pbarranis частные поля JavaScript на самом деле являются частными, и нет никакого доступа к ним из среды выполнения JavaScript.
Йогу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.