2017-02-14 15 views
19

Załóżmy mam ładunek JSON, który analizuje się coś takiego:Maszynopis: Jak definiować interfejsy dla obiektów zagnieżdżonych?

{ 
    name: "test", 
    items: { 
     "a": { 
      id: 1, 
      size: 10 
     }, 
     "b": { 
      id: 2, 
      size: 34 
     } 
    } 
} 

Jak bym utworzonej definicji interfejsu przykładu modelować, że wartość nieruchomości pozycji jest obiektem, którego klucze są ciągi i których wartości są zdefiniowane przez interfejs produktu:

export interface Example { 
    name: string; 
    items: ???; 

} 

export interface Item { 
    id: number; 
    size: number; 
} 
+0

Robisz to tak, jak mówi [documentation] (https://www.typescriptlang.org/docs/handbook/interfaces.html#indexable- typeses). Są to tak zwane "typy indeksowalne". Możesz zajrzeć jeszcze raz przez dokumenty - znajdziesz przydatne informacje, które pomogą ci uniknąć pytania o SO za każdym razem. –

Odpowiedz

31

Typescript pozwala dodać typ do kluczy obiektu przy użyciu składni [key: string].

Jak podano w dokumentacji, nazywane są one indexable types:

wieloostrzowe typy mają sygnaturę indeks opisujący typy możemy użyć do wskaźnika do obiektu, wraz z odpowiednimi rodzajami wrócimy kiedy indeksowanie.

W twoim przypadku można użyć następujących:

export interface Item { 
    id: number; 
    size: number; 
} 

export interface Example { 
    name: string; 
    items: { 
     [key: string]: Item 
    }; 
} 

odsyłającym o to link to a live example.

Powiązane problemy