打字稿:成员的下划线约定[关闭]

Posted

技术标签:

【中文标题】打字稿:成员的下划线约定[关闭]【英文标题】:Typescript : underscore convention for members [closed] 【发布时间】:2018-05-24 16:10:34 【问题描述】:

我有一个班级电子邮件

class Email 
  private _from: string;
  private _to: Array<string>;
  private _subject: string;

它会创建一个类似的电子邮件对象:


  _from:'',
  _to:'',
  _subject:''

这对我来说似乎有点奇怪,因为我不能直接使用这个对象发送到一个函数。相反,我必须转换对象,使其没有下划线。那么如何使用下划线约定还是必须转换对象。

编辑:如果我确实删除了“_”

如果我们命名私有变量时不带下划线,如何命名 getter 和 setter?一个名为 Typescript 工具箱的 VSCode 插件会创建类似这样的东西

public get $subject(): string  
  return this.subject;

$ 是一个好的约定吗?

【问题讨论】:

Naming convention for class properties in TypeScript的可能重复 如果你有合适的getter,为什么不能把这个对象发送给函数呢? 【参考方案1】:

那些说,千万不要用“_”的人,对他们来说,这里有一些来自TypeScript site的代码:

class Employee 
    private _fullName: string;

    get fullName(): string 
        return this._fullName;
     
    this._fullName = ......

***上的同样问题,你应该看看它,特别是答案。

如果接受的话,暂时不要用_,那还有什么更好的办法呢?

让我们以你的电子邮件为例,如果我们不使用 _ 那么,我们会这样:

member: to,      get/set: emailTo
member: from     get/set: emailFrom 

也许你可以想一些更好的名字,但每次你都需要思考,这在开发者世界中并不常见!

使用 _ 和同名的属性很容易检查代码,否则我们将继续将哪个属性映射到哪个成员。

但是:如果您被公司的领导强迫,那么您可以在没有它的情况下使用$ 作为成员和财产;不是规则而是简单的方法:

class Employee 
    private fullName$: string;

    get fullName(): string 
        return this.fullName$;
     
    this.fullName$ = ......

选择权在你手中!!!

【讨论】:

这是这里唯一正确的答案。其他答案是指适用于 TypeScript 贡献者(不是 TypeScript 社区)的约定。 我不建议使用 $ 符号,因为它非常常用来表示可观察/来源。 为什么不将 m 用于成员只是一个想法,例如mFullName.. 正如@Napinator 指出的,$ 通常用于可观察对象。 在我们公司,我们在使用 $var 时遇到了一些麻烦。一些处理它的人认为这是一些 jQuery 的东西。从那时起,我们正在使用您的第二个示例。 ES Lint 不允许这个 eslint.org/docs/rules/no-underscore-dangle【参考方案2】:

只需根据需要命名您的私有变量,但不要使用_。您可以创建自己的标准并坚持下去。

Setter 和 getter 与任何其他函数一样,因此您可以遵循方法命名约定。

不要使用“_”作为私有属性的前缀。尽可能在名称中使用完整的单词。

这是主观意见,如有必要,请随时使用_

编辑:$ 可用于为变量名添加前缀。在我的日常用例中,我使用它为可观察 (rxJS) 变量添加前缀。

编辑:

如果您有 getter,则可以使用 _ 命名字段以避免名称冲突。

【讨论】:

因为我们不能使用与 get 和 set 中的成员相同的名称。在这种情况下,什么是好的做法? 我的意思是成员私有名称:字符串不能与 public get name() public set name() 这将抛出一个重复的标识符 好吧,你可以用大小写来区分它,私有字段可以用 Pascal 大小写,而 get 和 set 可以用 Camel 大小写。哪个适合你。 我同意这个答案:如果你想使用 get 和 set 访问器,你必须在私有属性前加上下划线。在所有其他情况下不要使用它。 ***.com/a/40591268/94148 为什么这个答案被接受了?确实可以随意命名私有变量,但下划线确实是推荐的方式【参考方案3】:

私有字段的下划线“_”前缀是过时的样式。最好以可读且友好的方式命名您的变量。

请参阅 Microsoft Typescript 编码约定here

    不要使用“_”作为私有属性的前缀。

【讨论】:

那么,如果我们命名私有变量时不带下划线,我该如何命名 getter 和 setter?一个名为 Typescript 工具箱的 vscode 插件为它们创建了类似这样的东西 public get $subject(): string return this.subject; $ 是一个好的约定吗? 这是一个非常好的观点!简单的 getter(方法/访问器),例如 isEnabled() / get isEnabled() return this.isEnabled; 强制我们将私有成员命名为 f.e. “this.enabled”,有点尴尬(听起来更像是一个事件的专有名称)。我想人们可能会认为,在这些相当罕见的情况下,人们可以接受这样的命名,但是我力求代码的一致性,因此我必须在没有“is/has/did/wants/”的情况下命名所有私有成员。 .." 前缀,以防我有时想将它们公开为公共成员。这显然是个问题! “这些指南适用于 TypeScript 项目代码库的贡献者。这不是 TypeScript 社区的规定性指南。” 这些天来,我宁愿根本不编写 getter,而是将变量公开为只读。然后你只需要像这样编写setter:`class TestClass public readonly x: number; setX(value: number) (this as Writeable).x = value; `【参考方案4】:

在变量名中使用下划线作为前缀或后缀通常不被认为是好的做法。

请参阅Google Typescript Style Guide。本指南旨在作为关于样式的说明性指南,与另一个答案中链接的 Microsoft 样式指南不同,后者主要针对 TypeScript 存储库的贡献者。

_前缀/后缀:标识符不得使用_作为前缀或后缀

https://google.github.io/styleguide/tsguide.html

【讨论】:

以上是关于打字稿:成员的下划线约定[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

私有字段的命名约定

REST API 是不是有任何命名约定准则? [关闭]

google浏览器打字的时候会有下划线。而且打字的时候经常第一个字母不在下划线里面,直接就变成了其他的字

JSON 命名约定(snake_case、camelCase 或 PascalCase)[关闭]

折叠打字稿类成员的轮廓

访问打字稿类的成员变量是不是需要`this`?