打字稿:成员的下划线约定[关闭]
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在变量名中使用下划线作为前缀或后缀通常不被认为是好的做法。
请参阅Google Typescript Style Guide。本指南旨在作为关于样式的说明性指南,与另一个答案中链接的 Microsoft 样式指南不同,后者主要针对 TypeScript 存储库的贡献者。
_前缀/后缀:标识符不得使用_作为前缀或后缀
https://google.github.io/styleguide/tsguide.html
【讨论】:
以上是关于打字稿:成员的下划线约定[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
google浏览器打字的时候会有下划线。而且打字的时候经常第一个字母不在下划线里面,直接就变成了其他的字