2016-05-06 36 views
0

我想創建一個強制使用字符串作爲鍵的對象接口,但是TypeScript編譯器的密碼即使它有一個數字類型作爲鍵。爲什麼?如何在TypeScript界面​​中強制鍵入類型?

例如,

interface PriceI { 
    [key:string]:number; 
} 

var coursePrice: PriceI = {}; 
coursePrice["Orange"] = 100; 
coursePrice["Apple"] = 200; 
coursePrice[3]=200; // It should be compile error, but it pass 
coursePrice[true]=300; // It's compile error 
+1

打字稿中的靜態打字是javascript的高度動態性與大多數強類型語言中的嚴格類型執行之間的折中。我自己更喜歡更嚴格的TS,但設計師們害怕把JS的人嚇跑。 – Alex

回答

2

the handbook

有兩種類型支持指數的簽名:字符串和數字。可以同時支持這兩種類型的索引器,但從數字索引器返回的類型必須是從索引器返回的類型的子類型。這是因爲在索引number時,JavaScript實際上會將其轉換爲string,然後將它們編入對象中。這意味着使用100(a number)進行索引編制與使用"100"(a string)編制索引編號相同,因此這兩者需要保持一致。

在您的示例中,TypeScript認爲coursePrice[3] = 200;等效於coursePrice["3"] = 200;