未指定时暗指哪些访问修饰符?


138

对于支持访问修饰符的所有不同概念,例如字段,属性,方法和类,如果未指定,则隐含哪些访问修饰符?


@basarat,自从我使用TypeScript已有很长时间了,所以现在很难记住它是如何工作的!据我所知,您的回答看起来很合理,但是我认为它的权威性不足以让我将其标记为正确。您的答案是基于您对语言的经验还是基于规范中的信息?
山姆


1
为了阐明此问题和答案,应在问题中指定打字稿以使其清楚。有一个打字稿标签,但这只是我们不讨论scala,java,C#,C ++等的唯一指示。–
Absmiths

Answers:


216

在一切classpublic,如果没有指定。module除非使用export关键字,否则a中的所有内容都是私有的。


6
适用于使用入门套件的人。其中一些附带tslint,可能会造成混乱。当您看到此消息时,请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警告-您不会访问标记为私有的属性。
Andrew Bogdanov

3
我想不出什么语言实际上是私有的。在C#中,您可以通过反射轻松地到达任何私有领域。在C或C ++等较低级的语言中,只需移动指针即可获得私有字段。缺少操作系统级别的保护措施(例如DEP和加密的内存),访问修饰符只是编译器提供的帮助,可帮助您编写更好的代码。...对?
pbarranis

@pbarranis 私有JavaScript字段实际上是私有的,无法在JavaScript运行时中访问它们。
Yogu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.