2016-10-19 86 views
2

以下代碼是我總是用來定義TypeScript到目前爲止的構造函數。在TypeScript中手動和自動分配構造函數參數

export class DashboardComponent { 
    private heroService: HeroService; 
    constructor(heroService: HeroService){ 
     this.heroService = heroService 
    } 
} 

但最近當我檢查Angular 2document,我看到的語法較短,看起來像

export class DashboardComponent { 
    constructor(private heroService: HeroService){} 
} 

而且編譯JavaScript是相同

var DashboardComponent = (function() { 
    function DashboardComponent(heroService) { 
     this.heroService = heroService; 
    } 
    return DashboardComponent; 
}()); 

因爲在TypeScriptdocs只顯示第一個類型,所以我只是想確保兩個是相同的,我正在做的正確這兩種類型。

欣賞如果有人能幫我確認一下嗎?

+1

不要手動完成:https://www.stevefenton.co.uk/2013/04/stop-manually-assigning-typescript-constructor-parameters/ – Fenton

回答

3

是的,寫它的兩種方式實際上是相同的。您可以在GitHub上的官方語言規範here上看到第二個與public一起使用。

所以,

class BankAccount { 
    constructor(public balance: number) {} 
} 

相同

class BankAccount { 
    public balance: number 
    constructor(balance: number) { 
     this.balance = balance; 
    } 
} 

此外,在生成的JavaScript代碼的說明:使用privatepublic不會改變輸出。因爲在純JavaScript中,沒有「私人」成員這樣的事情:您無法阻止訪問您的對象的成員。 唯一的影響publicprivate已告訴TypeScript其他代碼應該訪問什麼和不應該訪問什麼。

+0

我還發現了一個關於TypeScript快捷方式的好資源。 https://angular.io/guide/displaying-data#creating-a-class-for-the-data – trungk18

相關問題