2017-08-28 79 views
0

我遇到其中變量的聲明與即使推斷出的類型是顯而易見的顯式類型的代碼幾種不同的情況:類型推斷主場迎戰打字稿明確的類型聲明

例如:loading: boolean = falsename: string = "John"count: number = 0

TSLint支持顯式類型的推斷類型,所以我想知道這只是一個風格問題?在運行時間中,這些顯式類型是否甚至重要?

回答

0

在你的例子中,它只是關於樣式,因此它從編譯的角度對你的代碼沒有影響。請注意,這是針對變量值明確定義其類型的情況,這可能會使您的代碼在從其他變量中取消值的情況下變得複雜。

換句話說,它可能是更好的你做:

name: string = "John" 
bday: Date = "1980/01/10" //the compiler says there is an error 

,並避免:

name = "John" 
bday = "1980/01/10" //no compiling error, but it should be new Date("1980/01/10") 

注:未定義類型總是被認爲是爲已任。

+0

儘管您的日期示例確實不會產生錯誤,但如果bday實際上應該是Date,您將希望訪問某些Date屬性,或者想要將其用作參數,其中參數爲Date,這會產生一個錯誤。我個人更喜歡在可能的情況下進行類型推理,但它可能只是我的懶惰:) –

+0

我的觀點是在兩種情況下都表現出錯誤的可能性。僅僅因爲屬性類型,這是非常常見的條件錯誤。我更喜歡儘可能少寫,但我知道這會讓我的代碼難以閱讀。 – Cleriston

0

聲明的類型在運行時完全不重要。當生成Javascript時,所有類型都將被刪除,因爲Javascript不支持指定變量類型。至於爲什麼TSLint更喜歡類型推斷或者直接輸入,我會說它可能會讓事情乾涸(不要重複自己)。由於編譯器可以爲你輸入,所以沒有理由在代碼中增加更多噪聲。