Härled typen av en array i Typescript
Jag har en typ som är definierad i ett tredjepartsbibliotek. Låt oss säga att dess form är:
type Foo = {
id: string
results: Array<{ bar: string }>
}
Finns det ett sätt att härleda typen { bar: string }?
Jag skulle vilja använda det så här:
type Baz = /* derived type */
const baz: Baz = { bar: 'abc' }
Jag tittade på nyttotyper... men kunde inte lista ut hur man riktar in sig på den delen av typdefinitionen.
Svar #1
Arrayer indexerade med number ger dig medlemstypen för arrayen, eftersom arrayer är indexerade med heltal.
type Foo = {
id: string
results: Array<{ bar: string }>
}
type Baz = Foo['results'][number]
const baz: Baz = { bar: 'abc' }
Lekplats
Svar #2
Fick lite hjälp från en TS-trollkarl. Detta är en fungerande lösning:
type Foo = {
id: string
results: Array<{bar: string}>
}
type ElementsOf<T extends unknown[]> = T extends ReadonlyArray<infer E> ? E : never;
// type Baz = { bar: string; }
type Baz = ElementsOf<Foo["results"]>;
Skulle älska om någon kunde hjälpa till att förklara ternära uttrycket dock.
