Deriveți tipul unui array în Typescript
Am un tip care este definit într-o bibliotecă terță parte. Să spunem că forma sa este:
type Foo = {
id: string
results: Array<{ bar: string }>
}
Există o modalitate de a deriva tipul { bar: string }?
Aș dori să-l folosesc astfel:
type Baz = /* derived type */
const baz: Baz = { bar: 'abc' }
Mă uitam la tipurile de utilitate... dar nu am reușit să înțeleg cum să vizez acea parte a definiției tipului.
Răspuns #1
Tablourile indexate prin number îți oferă tipul membrului tabloului, deoarece tablourile sunt indexate prin întregi.
type Foo = {
id: string
results: Array<{ bar: string }>
}
type Baz = Foo['results'][number]
const baz: Baz = { bar: 'abc' }
Teren de joacă
Răspunsul #2
Am primit ajutor de la un vrăjitor TS. Aceasta este o soluție care funcționează:
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"]>;
Mi-ar plăcea dacă cineva ar putea să explice totuși operatorul ternar.
