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
