[英]TypeScript getter setter convention
TypeScript 中類屬性的約定(標准)是什么?
在 angular 2 演示(來自 angular.io 的 The Heroes Tour)中,所有屬性都設置為 public :
export class Hero {
id: number;
name: string;
}
所以它們可以通過兩種方式實例化:
var hero: Hero = new Hero();
hero.id = 0;
hero.name = "hero";
或者
var hero2: Hero = {id : 0, name: "hero"};
是否有 Java 風格約定(像這樣):
export class Hero {
private id: number;
private name: string;
setId(id: number): Hero {
this.id = id;
return this;
}
setName(name: string): Hero {
this.name = name;
return this;
}
getId(): number {
return this.id;
}
getName(): string {
return this.name;
}
}
聲明(示例):
var hero: Hero = new Hero();
hero.setId(0).setName('hero');
var hero2: Hero = new Hero().setId(0).setName('hero');
是否有 Java 風格約定(像這樣)
你可以做到這一點(事實上我做到了)。 人們也使用getter
/ setter
:
export class Hero {
private _id: number;
set id(id: number) {
this._id = id;
}
}
但是,請注意不要在 setter 中放置太多邏輯: https : //basarat.gitbooks.io/typescript/content/docs/tips/propertySetters.html 。 我通常更喜歡顯式函數調用。
var hero2: Hero = {id : 0, name: "hero"};
這是 TypeScript 類型檢查的結構性質的一個弱點(或方便強度)。 更多關於這一點。
打字稿被轉換成計划javascript,所以......如果你需要設置值之前或之后的東西,如何記錄,你來實現。 如果不需要,getter 和 setter 是多余的。 對我來說,實例化和設置器與 Java 相同。
例子:
export class Person{
public name: string;
public anotherAttribute: string;
private age: number;
private _birth: Date;
public set birth(birt: Date){
this._birth = birth;
this.age = calculateAge(birth);
}
.......
}
let person: Person = new Person();
person.name = "John";
......
是否有 Java 風格約定
好吧,如果您願意,您可以這樣做,但由於它們是不同的語言,您可能應該使用打字稿約定,這些約定通常通過 . 符號..對於使用打字稿的任何人來說,這都更具可讀性..並且可以說對於Java開發人員來說也是如此:)盡管我很喜歡Java,但我確實意識到傳統的編碼會讓我輸入2倍有用的東西。
事實上,Java 之類的語言過度聲明是開發人員之間的一個常見笑話
tl;dr no.. 使用 myObject.myMember 直接訪問成員
是因為圍繞設置您想要使用 Java 樣式的單個屬性的額外代碼嗎? 如果是這樣,您可以在類的構造函數中聲明屬性。
英雄類
export class Hero {
constructor(public id?: number, public name?: string) {}
}
聲明
const hero1 = new Hero(1, 'hero');
const hero2 = new Hero();
Java 是一種靜態編譯語言。 在 Java 中,如果您發布一個帶有類的 .jar 庫
class Foo {
public int bar;
}
然后決定圍繞該領域引入邏輯
class Foo {
private int _bar;
public int getBar() { return _bar - 1; }
public void setBar(int v) { _bar = v + 1; }
}
任何使用您的 .jar 的代碼都會中斷,必須更新和重新編譯。 這就是為什么在 Java 中公開原始公共字段是一個很大的禁忌。
TypeScript 是 JavaScript 的超集,它是一種動態語言。 所有鏈接都是動態的。 您可以安全地發布帶有類的庫
class Foo {
bar: number
}
如果您稍后發布更新
class Foo {
private _bar: number
get bar() { return this._bar - 1 }
set bar(v: number) { this._bar = v + 1 }
}
您的圖書館用戶不會注意到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.