len*_*nny 16 parameters naming-conventions typescript
根据你应该 的官方风格指南
避免使用下划线为私有属性和方法添加前缀.
由于我来自Java背景,我通常只使用this关键字:
export default class Device {
private id: string;
constructor(id: string) {
this.id = id;
}
public get id(): string { // [ts] Duplicate identifier 'id'.
return this.id;
}
public set id(value: string) { // [ts] Duplicate identifier 'id'.
this.id = value;
}
}
Run Code Online (Sandbox Code Playgroud)
但TypeScript编译器抱怨:[ts]重复标识符'id'.
在TypeScript构造函数中是否存在参数命名的约定或最佳实践?
编辑
抱歉,我错过了实际导致TS编译器错误的代码的基本部分.
使用TypeScript 的get和set属性会产生错误.
所以我更新了一个问题:有没有办法遵循样式指南并使用TypeScript的get/set属性?
Eri*_*pal 20
如果要使用get和set访问器,则必须在私有属性前加下划线.在所有其他情况下不要使用它.我会说使用下划线和加速器是一种特殊情况,尽管它没有明确地用编码指南编写,但这并不意味着它是错误的.他们在官方文档中使用它.
对于开始,我想强调的区别field和property.在Java或C#等标准高级OOP语言中,field是一个私有成员,对其他类不应该是可见的.如果要在考虑封装的情况下公开它,则应创建属性.
在Java中,你这样做(它被称为Bean属性):
private int id;
public int getId() {
return this.id;
}
public setId(int value) {
this.id = value;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过调用以下方法来访问该属性:
int i = device.getId();
device.setId(i);
//increment id by 1
device.setId(device.getId() + 1);
Run Code Online (Sandbox Code Playgroud)
另一方面,C#的设计使得使用属性更加容易:
private int id;
public int Id {
get {
return this.id;
}
set {
this.id = value;
}
}
Run Code Online (Sandbox Code Playgroud)
(值始终是指定的值.)
您可以直接为这些属性指定值或获取属性值.
int i = device.Id;
device.Id = i;
//increment id by 1
i
Run Code Online (Sandbox Code Playgroud)
在纯JavaScript中,没有真正的字段,因为类成员总是公开的; 我们简单地称它们为属性.
在TypeScript中,您可以定义"真正的"类C#属性(使用封装).你使用Accessors.
private _id: number;
public get id(): number {
return this._id;
}
public set id(value: number) {
this._id = value;
}
Run Code Online (Sandbox Code Playgroud)
用法:
let i: number = device.id;
device.id = i;
//increment id by 1
device.id++;
Run Code Online (Sandbox Code Playgroud)
你必须在这里使用下划线,原因有两个:
| 归档时间: |
|
| 查看次数: |
8816 次 |
| 最近记录: |