Typescript: få typen av första egenskapen av typ


Jag får ett nästlat objekt som resultat av en GraphQL-fråga med frågens namn som första nivåns nyckel och de faktiska uppgifterna på andra nivån:

{
    getProduct: {
        id: "1",
        name: "test",
    }
}

I min frågefunktion hämtar jag automatiskt det första nyckeln i objektet och returnerar värdet av getProduct. Jag skulle dock vilja härleda typen för den första nyckeln som returvärdet av frågefunktionen.

type QueryReturn = FirstElement<GetProductQuery>; // should be { id: string; name: string }

Alla lösningar jag har hittat på Internet härleder huvudet eller svansen av en array eller funktion.

Svar #1

Jag är lite sen till festen, men jag såg att du använde graphql-codegen. Jag hade ett liknande problem som jag löste med:

type DataType = {
  __typename?: string;
};

type FilteredQuery<T> = {
  [P in keyof T as T[P] extends DataType ? P : never]: T[P];
};

type QueryData<T> = FilteredQuery<T>[keyof FilteredQuery<T>];

TypeScript-lekplats exempel.

Svar #2

Lite sent. Om du kan försäkra att du alltid har en enda nyckel i den yttersta typen, kan du göra det genom att använda keyof-operatorn och typ för indexerad åtkomst.

Detta kommer att bete sig märkligt om du inte har några nycklar eller fler än en nyckel i den yttersta typen, så se till att du alltid har exakt en nyckel i alla scenarier.

Exempel :

type Unwrap<T> = T[keyof T];

type QueryReturn = Unwrap<GetProductQuery>;

Lekplatslänk

Relaterade artiklar