Maszynopis: Jak zdefiniować interfejsy dla obiektów zagnieżdżonych?


94

Załóżmy, że mam ładunek JSON, który analizuje na coś takiego:

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

Jak skonfigurować definicję interfejsu Przykład, aby modelować, że wartość właściwości items jest obiektem, którego klucze są ciągami znaków i którego wartości są definiowane przez interfejs Item:

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

}

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

Odpowiedzi:


161

Typescript umożliwia dodanie typu kluczy obiektów przy użyciu składni [key: string].

Jak stwierdzono w dokumentacji, są to nazywane typy indeksowalne :

Typy indeksowalne mają sygnaturę indeksu, która opisuje typy, których możemy użyć do indeksowania obiektu, wraz z odpowiednimi typami zwracanymi podczas indeksowania.

W twoim przypadku użyłbyś:

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

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

Dla odniesienia, oto link do przykładu na żywo .


2
Dlaczego eksportujesz Iteminterfejs? Czy eksportowanie nie wystarczy tylko do Exampleinterfejsu?
— Alexander Kim,

2
@AlexanderKim tak, chyba że Itemjest przydatny w innym kodzie używającym również tych typów.
— evanrmurphy

czy ktoś wie, jak ustawić klucze elementów ze stanem i uzyskać do nich dostęp?
— Dog

@ Pies oczywiście, ale to nie jest witryna „kod dla mnie”
— Emobe

Dzięki za to miałem problem z dostępem do interfejsu zdefiniowanego w jednym pliku klasy w innej klasie. Nie zdefiniowałem interfejsu z eksportem. Po dodaniu eksportu import na to strony pozwolił mi następnie zaimportować klasę i interfejs dzięki.
— Gurnard
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.