打字稿:成员的下划线约定

Typescript : underscore convention for members

我有一个 class 电子邮件

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

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

{
  _from:'',
  _to:'',
  _subject:''
}

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

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

如果命名私有变量不带下划线,如何命名getters和setters?一个名为 Typescript toolbox 的 VSCode 插件创建了这样的东西

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

$ 是一个好的约定吗?

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

参见 Microsoft Typescript 编码约定 here

  1. Do not use "_" as a prefix for private properties.

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

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

Do not use "_" as a prefix for private properties.
Use whole words in names when possible.

This is a subjective opinion, feel free to use _ if you must.

Edit: $ can be used to prefix variable names. In my everyday use case I use it in prefixing observable (rxJS) variables.

编辑:

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

那些说不能使用“_”的人,这里有一些来自 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$ = ......
}

选择权在你手上!!!

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

Google Typescript Style Guide。本指南旨在作为样式的说明性指南,这与另一个答案中链接的 Microsoft 样式指南不同,后者主要供 TypeScript 存储库的贡献者使用。

_ prefix/suffix: Identifiers must not use _ as a prefix or suffix

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