2013-07-07 11 views
11

Co robi identyfikator podpisu indeksu?W maszynopisie, jaki jest identyfikator podpisu indeksu?

interface IIndex { 
    [something: string]: any; 
} 

Gdzie ktoś ponownie użyłby "czegoś"?

Lub innymi słowy, dlaczego nie jest to po prostu składnia:

interface IIndex { 
    [string]: any; 
} 
+2

Przypuszczam, że "coś" dokumentuje rzeczywisty klucz do wyszukiwania w słowniku, a nie tylko jego typ. Jednak domyślna nazwa "klucza" prawdopodobnie powinna działać w 99% sytuacji ... Istnieje kilka przypadków (np. '' [Nazwa-stylu: ciąg]: ciąg''), gdzie niestandardowa nazwa może dostarczyć więcej dokumentacji. –

Odpowiedz

7

Moje przypuszczenie byłoby, że to ze względu na spójność i bliskości JavaScript.

Podobnie jak to jest powszechne, aby wymienić swoje argumenty metody (nawet w interfejsy), wszystkie argumenty do metod, konstruktorów, funkcji i indeksujących w TS musi być formatu name: type lub name (czyli name: any). (uproszczona wersja tej historii, ale jestem pewien, że mnie dostać)

Od nazwy i typy żyją w różnych nazw w maszynopisie, argument postaci string byłaby niejednoznaczna. Pamiętaj, że misją TypeScript jest trzymanie się blisko JavaScript, więc interpretacja powyższego jako argumentu typu string byłaby nie do przyjęcia i okazuje się, że jest to odpowiednik string: any.

Ponadto podczas indeksujący może być wyjątkiem, ponieważ mogą być tylko rodzajów string lub number to nie zawsze miało (TS 0,8 pozostawiono any), dzięki innym powodem może być umożliwienie migracji do 0,9.

Powiązane problemy