diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-02-18 22:29:23 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2022-02-18 22:29:23 +0900 |
| commit | 0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c (patch) | |
| tree | 468dced980257bd25dad72c72ffe6f590d09b7a5 /packages/backend | |
| parent | refactor: add InstanceRepository (diff) | |
| download | sharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.tar.gz sharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.tar.bz2 sharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.zip | |
refactor: better getChart result type
Diffstat (limited to 'packages/backend')
| -rw-r--r-- | packages/backend/src/services/chart/core.ts | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/packages/backend/src/services/chart/core.ts b/packages/backend/src/services/chart/core.ts index ddcedba94b..cc10900e9f 100644 --- a/packages/backend/src/services/chart/core.ts +++ b/packages/backend/src/services/chart/core.ts @@ -70,6 +70,18 @@ type ChartResult<T extends Schema> = { [P in keyof T]: number[]; }; +type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never; + +type UnflattenSingleton<K extends string, V> = K extends `${infer A}.${infer B}` + ? { [_ in A]: UnflattenSingleton<B, V>; } + : { [_ in K]: V; }; + +type Unflatten<T extends Record<string, any>> = UnionToIntersection< + { + [K in Extract<keyof T, string>]: UnflattenSingleton<K, T[K]>; + }[Extract<keyof T, string>] +>; + /** * 様々なチャートの管理を司るクラス */ @@ -642,12 +654,12 @@ export default abstract class Chart<T extends Schema> { } @autobind - public async getChart(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<Record<string, unknown>> { + public async getChart(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<Unflatten<ChartResult<T>>> { const result = await this.getChartRaw(span, amount, cursor, group); const object = {}; for (const [k, v] of Object.entries(result)) { nestedProperty.set(object, k, v); } - return object; + return object as Unflatten<ChartResult<T>>; } } |