2016-10-03 168 views
5

我不確定這是否是這個問題的地方,但我被告知代碼審查不是它的地方。Typescript - 變量聲明

我只是學習角2和打字稿,所以我通過這個教程如下工作:

https://angular.io/docs/ts/latest/tutorial/toh-pt4.html

部分三,四之間,heroes變量從app.component.ts變化的聲明:

export class AppComponent { 
    heroes = HEROES; 
} 

到:

export class AppComponent { 
    heroes: Hero[]; 
} 

我明白第一個將它設置爲英雄陣列的常量,但爲什麼第二個使用冒號而不是將它設置爲空數組?

將第二個更改爲=實際上會拋出表達式期望錯誤,所以基本上我只是想了解兩者之間的差異。

回答

5
heroes: Hero[]; 

未將其設置爲某個值。 它只是限定了與

  • 名稱= heroes
  • 類型= Hero[]這意味着Hero
  • 陣列而不指定其保持在它的默認值null的值的屬性。

隨着初始化它看起來像

heroes: Hero[] = [new Hero('Spidey'), new Hero('Batman')]; 
+1

不知道你的意思是用什麼數。我更新了我的答案。 –

+1

現在有道理,它會讓我接受。 TA! – Pete

1

兩者之間的區別是,第一個是JavaScript的,你變量,常量** HEROES分配您的英雄*。

第二個是打字稿,你說的英雄變量將是一個英雄數組,基本上你定義了一個空變量。

這就像,你這樣做public int myNumber在你的類Java或C#

+1

不錯,我喜歡c#的比較 - 我想這就是扔我,因爲我知道它被轉換爲js,我認爲它也設置變量,因爲js沒有強類型的變量在這個意義上 – Pete

1

你的第一個理解是正確與

heroes = HEROES 

現在,

heroes : Hero [ ]; 

這裏持有Hero reprents類某些屬性。通過這一行,您正在告訴打字稿編譯器heroes variable將保留list of objects類型爲Hero(自定義或用戶定義類型)。在OOP世界中,class是一個用戶定義的數據類型,根據該類型可以聲明任何具有該類型的變量。

請注意,你可以用Type來聲明(:)任何可變參數,你不能分類(=)Type(in Typescript),但你可以將that Type of data分配給變量。

所以,你不能使用=

我希望這將幫助你......

0

只是補充@君特Zöchbauer,

類/接口聲明

:屬性名後用來定義它的類型。

然而,這可能導致當你創建一個對象有點迷惑,對即時,其中,在這種情況下,:馬克值分配:

interface MyInterface { 
    myBooleanProperty: boolean = false; 
} 

// ... somewhere 

let a = { 
    myBooleanProperty: true 
}; 

// and to add a little more fun 

let b: MyInterface = { 
    myBooleanProperty: true 
}