layout.d.ts: ExtractIds gives back { id: T }

pull/2587/head
Rob Pilling 2023-01-27 23:10:03 +00:00
parent ec75c37d37
commit 79ebde3e69
1 changed files with 5 additions and 3 deletions

View File

@ -3,7 +3,9 @@ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
type ExtractIds<T extends Layout_.Hierarchy, Depth extends Prev[number] = 9> = type ExtractIds<T extends Layout_.Hierarchy, Depth extends Prev[number] = 9> =
[Depth] extends [never] [Depth] extends [never]
? never ? never
: (T extends { id: infer Id extends string } ? Id : never) : (T extends { id: infer Id extends string }
? { [k in Id]: T }
: never)
| |
( (
T extends { c: Array<infer Sub extends Layout_.Hierarchy> } T extends { c: Array<infer Sub extends Layout_.Hierarchy> }
@ -13,9 +15,9 @@ type ExtractIds<T extends Layout_.Hierarchy, Depth extends Prev[number] = 9> =
declare module Layout_ { declare module Layout_ {
type Layouter<T extends Hierarchy> = type Layouter<T extends Hierarchy> =
ExtractIds<T>
&
{ {
[k in ExtractIds<T>]: number;
} & {
// these actually change T // these actually change T
render(l?: T): void; render(l?: T): void;
layout(l: T): void; layout(l: T): void;