指定されていない場合、どのアクセス修飾子が暗示されますか?


138

フィールド、プロパティ、メソッド、クラスなど、アクセス修飾子をサポートするさまざまな概念のすべてについて、指定されていない場合、どのアクセス修飾子が暗黙指定されますか?


@ basarat、TypeScriptを使用してから久しぶりなので、最近の動作を思い出すのは大変です。私の記憶では、あなたの答えは妥当なように見えましたが、私がそれを正しいとマークするのに十分な信頼性があるとは思いませんでした。答えは言語の経験に基づいていますか、それとも仕様の情報に基づいていますか?
Sam


1
この質問と回答を明確にするために、明確にするために質問にtypescriptを指定しておく必要があります。typescriptタグがありますが、それは、私たちがscala、java、C#、C ++などについて説明していない唯一の兆候です
。– absmiths

回答:


216

指定されていない場合、aのすべてclasspublicです。キーワードが使用されmoduleない限り、aのすべてはプライベートexportです。


6
スターターキットで遊ぶ人向け。それらの一部はtslintとともに出荷され、非常に混乱する可能性があります。このメッセージが表示されたら、デフォルトまたは暗黙のアクセス修飾子を許可するためにdefault access modifier on member/method not allowed チェックtslint.jsonしてください。
visheshd 2016年

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でした。アクセス修飾子は、JavaScriptの概念ではなく、TypeScriptの概念です。したがって、@ basaratの回答は、質問で私が何を意味しているかに対処したものであり、質問の文脈では正しいように思われます。おそらく、質問と回答の文言を明確にする余地があるでしょう。
2016年

これがTSのしくみです。TSの観点から見た「正しい」かどうかに関係なく、コードをコンパイルします。これは、クラスの例外なくTSのすべてのものを意味しますが、主なポイントは、TS警告を尊重するかどうかです。プライベートとしてマークされたプロパティにアクセスする。
Andrew Bogdanov 2017

3
何かが実際に私的なものである言語は考えられません。C#では、リフレクションを通じてプライベートフィールドに簡単にアクセスできます。CやC ++などの低レベル言語では、ポインターを移動するだけでプライベートフィールドを取得できます。DEPや暗号化されたメモリなどのOSレベルでの保護手段が不足している場合、アクセス修飾子は、より優れたコードの記述に役立つコンパイラ提供の支援にすぎません。...正しい?
pbarranis

@pbarranis プライベートJavaScriptフィールドは実際にはプライベートであり、JavaScriptランタイム内からそれらにアクセスする方法はありません。
Yogu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.