Typescript:成员的下划线约定

Jes*_*ias 6 javascript typescript ecmascript-6 es6-class typescript2.0

我有一堂课

class Email {
  private _from: string;
  private _to: Array<string>;
  private _subject: string;
}
Run Code Online (Sandbox Code Playgroud)

它将创建一个类似于以下内容的电子邮件对象:

{
  _from:'',
  _to:'',
  _subject:''
}
Run Code Online (Sandbox Code Playgroud)

这对我来说有点奇怪,因为我不能直接使用此对象发送给函数。取而代之的是,我必须转换对象,使其不带有下划线。因此,如何使用下划线约定或必须转换对象。

编辑:如果我确实删除'_'

如果我们命名不带下划线的私有变量,如何命名获取器和设置器?一个叫做Typescript工具箱的VSCode插件会创建这样的东西

public get $subject(): string { 
  return this.subject;
}
Run Code Online (Sandbox Code Playgroud)

$是个好习惯吗?

Ali*_*avi 14

那些说不能使用“_”的人,对于他们来说,这里有一些来自TypeScript 站点的代码:

class Employee {
    private _fullName: string;

    get fullName(): string {
        return this._fullName;
    } 
    this._fullName = ......
}
Run Code Online (Sandbox Code Playgroud)

关于Stackoverflow 的同样问题,你应该看看它,尤其是答案。

暂时,如果接受了,我们不应该使用_,那么还有什么更好的方法呢?

让我们以您的电子邮件为例,如果我们不使用 _ ,我们将是这样的:

member: to,      get/set: emailTo
member: from     get/set: emailFrom 
Run Code Online (Sandbox Code Playgroud)

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

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

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

class Employee {
    private fullName$: string;

    get fullName(): string {
        return this.fullName$;
    } 
    this.fullName$ = ......
}
Run Code Online (Sandbox Code Playgroud)

这是你的选择!!!

  • 这是这里唯一正确的答案。其他答案是指针对 TypeScript 贡献者(而不是 TypeScript 社区)的约定。 (5认同)
  • 我不建议使用 $ 符号,因为它通常用于指示可观察/源。 (3认同)

Dan*_*ran 7

私有字段的下划线“ _”前缀已过期。最好以可读和友好的方式命名变量。

在此处查看Microsoft Typescript编码约定

  1. 不要将“ _”用作私有属性的前缀。

  • “这些准则是供TypeScript项目的代码库的贡献者使用的。这不是TypeScript社区的规定性准则。” (6认同)
  • 那么,如果我们命名不带下划线的私有变量,我该如何命名getter和setter?一个叫做Typescript工具箱的vscode插件会创建它们,就像这个公共get $ subject():string {return this.subject; $是一个好的约定吗? (3认同)
  • 这是一个非常好的观点!简单的 getter(方法/访问器),例如 isEnabled() / get isEnabled() { return this.isEnabled; 强制我们将私有成员命名为 fe “this.enabled”,这有点尴尬(听起来更像是事件的专有名称)。我想人们可能会认为,在这些相当罕见的情况下,人们可以接受这样的命名,但是我努力保持代码的一致性,因此我必须在没有“is/has/did/wants/”的情况下命名所有私有成员。 .." 前缀,以防万一我有时想将它们公开为公共成员。这显然是一个问题! (3认同)
  • @chocolateboy 那又怎样?它仍然是提高可读性的良好指南。 (2认同)

Joh*_*edy 7

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

设置器和获取器与其他任何函数一样,因此可以遵循方法命名约定进行命名。

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

  • 为什么这个答案被接受?确实,您可以随意命名私有变量,但使用下划线确实是推荐的方法 (9认同)
  • 因为我们不能使用与 get 和 set 中的成员相同的名称。在这种情况下,什么是好的做法? (6认同)
  • 我同意以下答案:如果要使用get和set访问器,则必须在私有属性前添加下划线。在其他所有情况下,请勿使用。/sf/answers/2841388791/ (5认同)
  • 这不应该是公认的答案。引用的资源不是惯例,而是出于一致性原因由特定团队遵循的内部指南:[we-have-chosen-many-of-them-for-team-consistency](https://github.com/Microsoft /TypeScript/wiki/编码指南) (3认同)