2016-09-21 47 views
0

打字稿(2.0)並沒有給出這樣的錯誤:奇怪的可轉位styping

let x: { [index: string]: Object } = {1: 2} 

我看到有兩個潛在的錯誤:

  1. 索引字段是數字型,但應該是字符串
  2. 項目類型也是數字,但應該是一個對象類型

爲什麼它通過?

回答

2
  1. Indexable Types docs它指出:

有兩種類型支持指數的簽名:字符串和數字。 可以同時支持這兩種類型的索引器,但從數字索引器返回的類型 必須是從字符串索引器返回的 類型的子類型。這是因爲當用一個數字索引時,JavaScript實際上會將它轉換爲一個字符串,然後索引到 的一個對象。這意味着與100(一個數字)索引是相同的 東西作爲索引與「100」(一個字符串),所以這兩個需要是 一致。

這就是爲什麼當您使用數字作爲索引而不是字符串時它接受它。
索引始終是字符串。

  • 在文檔的一部分,其中Any is explained它指出:
  • ... Object類型的變量只允許你任意值分配給 他們...

    用下面的例子:

    let prettySure: Object = 4; 
    

    基本上,Object可以是任何東西。

    +0

    謝謝,這是有道理的。 – WHITECOLOR