0
以下打字稿代碼生成一個運行時錯誤:尾隨逗號禁用類型檢查?
var ns: number[] = ['1',];
alert('' + ns[0].toFixed());
據我所知,因爲數組文本輸入得到了any[]
分配是好的。但爲什麼它首先是any[]
?
是在語言規範描述的任何地方這後面的逗號行爲?
以下打字稿代碼生成一個運行時錯誤:尾隨逗號禁用類型檢查?
var ns: number[] = ['1',];
alert('' + ns[0].toFixed());
據我所知,因爲數組文本輸入得到了any[]
分配是好的。但爲什麼它首先是any[]
?
是在語言規範描述的任何地方這後面的逗號行爲?
數組文本可以包含未定義的項目,例如:
var a = [,"1",,"3",,,"6"];
作爲該創建與類型string
和undefined
的值的數組,在打字稿的類型將是any
處理兩者。
具有該陣列在一個單一的結尾逗號實際上將不會在最後創建未定義的值,也就是用javascript怪癖之一。所以,在你的情況下,實際的數組只有單個字符串,TypeScript可以使用類型string[]
作爲數組,但我猜測TypeScript不能處理這個特殊的問題。
它爲什麼突然讓'undefined'?嘗試Chrome/Node:'['1',] => ['1']'(長度1),'['1',] => ['1',undefined]'(長度2);即首先沒有未定義的元素。 – coudy 2013-04-07 11:41:55
@coudy:是的,這就是Javascript的行爲。最後一個未定義的項目被忽略,這可能是因爲在最後偶然添加的單個尾隨逗號不應產生未定義的值。 – Guffa 2013-04-07 11:47:06
感謝您的編輯,聽起來更有可能。所以,由於尾隨逗號不會改變數組的內容,但會產生非常令人驚訝且難以檢測的輸入問題(除了對乾淨的差異有用之外),我認爲這是一個TS錯誤。 – coudy 2013-04-07 11:48:01