【问题标题】:The use of private in TypeScript在 TypeScript 中使用 private
【发布时间】:2018-08-03 00:54:18
【问题描述】:

这是一个征求意见的请求,我们称之为 RFO 我希望社区能很好地接受这一点,因为我非常希望得到反馈,并且总体上觉得我们都可以使用更多的见解这个经常被忽视的问题。

自从 C# 出现以来,我一直是 C# 开发人员(我从 ASP 过渡)。当我编写代码时,我很自然地倾向于使用publicprivate。几乎不可能阻止我将public 添加到我在 TypeScript 中的方法和属性中,即使它是默认的。

我对 TypeScript 甚至是严肃的 JavaScript 还有些陌生(在 typescript 上工作了 2 年)。

众所周知,private 实际上不是在转译代码中的private。因此,虽然private 成员访问 对单独或团队工作的 Typescript 开发人员很有帮助,但输出的 JavaScript 却被额外的变量污染了。

一个人可能有吸气剂和漂亮的设计原则,但最终,你所拥有的是一堵执行相同操作的变量墙,或者至少否定了我们为保护所做的所有努力代码。我们使用下划线 _toLetOthersKnowOurIntent。 Angular 的样式指南建议我们避免在私有变量上使用 _。

那么问题是,如果您在 typescript 中编写代码供使用 JavaScript(某种包)使用的人使用,那么使用私有属性是否更有害且更令人困惑。使用或private 是否仅适用于与其他 TypeScript 开发人员合作。如果你正在开发一个库,比如说一个通过 NPM 分发的 Angular 组件,应该一起避免 private 吗?

【问题讨论】:

  • 您好 Eddie,您在问题中明确征求意见,而 StackOverflow 的 FAQs 声明任何问题“......主要基于意见的问题,或者可能产生讨论而不是答案......”应该避免。由于您没有解决实际的“问题”,因此 SOFTware Engineering SE 站点可能是一个更好的起点。 This question 可能已经对你有所帮助了。

标签: angular typescript


【解决方案1】:

TypeScript 类型和可见性功能不会影响 JavaScript 输出。

由于 TypeScript 是 Angular 社区的首选语言,私有成员通常会在使用 TypeScript 编写的库中受到尊重。

Angular 风格指南是固执己见的,不一定会考虑所有因素。 TypeScript 可见性反映在生成的文档和 IDE 中,但有额外的方法来指定成员不是公共的总是有益的,例如在调试期间或将已编译的 TypeScript 代码与 JavaScript 一起使用。

Angular 代码库本身包含很多_ 下划线成员,只是因为这样方便,所以官方风格指南显然不能被认为是无可挑剔的。只有在需要解构时才会后悔:

const { foo, bar } = this; // nice
const { _baz: baz, _qux: qux } = this; // not so nice

另一个问题是并非每个 IDE 或编辑器都完全支持 Angular 模板。由于 AOT 编译的工作原理,它要求组件模板中使用的所有成员都是公共的。这不会影响 JIT 编译,通常用于开发。确保不会在模板中意外使用私有成员成为开发人员的责任。这是_匈牙利符号解决的另一个问题。

如果用户有机会从扩展类中受益,请考虑使用protected 而不是private。 JavaScript 中没有真正的封装,因此不合适的可见性永远不会阻止用户以用户想要的方式使用第三方代码,而只会跳过箍。

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2020-01-13
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多