2017-07-01 83 views
0

我具有相同模塊TS爲什麼要創建雙變量傳遞參數?

export class Ingredient { 
    public name: string; 
    public amount: number; 

    constructor(public pname: string, public pamount: number){ 
     this.name = pname; 
     this.amount = pamount; 
    } 
    } 

和comonen.ts我有陣列成份

ingredients: Ingredient[] = [new Ingredient('Apples', 5), 
new Ingredient('Apples', 5), 
new Ingredient('Tomatoes', 2), 
new Ingredient('Olives', 3), 
new Ingredient('Onion', 4) 

];

我調試,發現類似的東西:

0: 
Ingredient 
pname: 
Apples 
pamount: 
5 
name: 
Apples 
amount: 
5 

爲什麼它的創建PNAME和名稱可變我不明白?如何才能創建變量名稱和金額?

回答

1

您的構造函數正在創建這些屬性,因爲您將它們標記爲public

在構造函數中使用public關鍵字本質上是一種創建公共屬性的「捷徑」方式,它可以從構造函數參數中自動分配。因此,代碼:

export class Ingredient { 
    constructor(public pname: string, public pamount: number){ 
    } 
} 

基本上等同於:

export class Ingredient { 
    public pname: string; 
    public pamount: number; 

    constructor(pname: string, pamount: number){ 
     this.pname = pname; 
     this.pamount = pamount; 
    } 
} 

所以,你真正想要的是眼前這個:

export class Ingredient { 
    constructor(public name: string, public amount: number){ } 
} 

,你應該是好去。該功能被稱爲參數屬性well hidden in the official documentation.

+0

它的工作表示感謝。我還有一個問題,如果構造函數是創建公共屬性的快捷方式,爲什麼如果我將在類中使用默認修飾符變量,並在構造函數中使用公共,它也創建雙變量? –

+0

沒問題。我不確定我是否理解這第二個問題。如果在類的主體和構造函數中都有相同的屬性聲明,那麼typescript編譯器應該引發「重複屬性」錯誤。 –