From bf1165bf08a2ad09c0f918eea7dd64a3429cdcd4 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 13 Aug 2024 11:29:16 +0200 Subject: [PATCH] improve type hints II --- frontend/src/lib/components/apps/utils.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/apps/utils.ts b/frontend/src/lib/components/apps/utils.ts index d2c0f53b38..3f63922f25 100644 --- a/frontend/src/lib/components/apps/utils.ts +++ b/frontend/src/lib/components/apps/utils.ts @@ -174,7 +174,7 @@ export function buildExtraLib( .filter(([k, v]) => k != idToExclude && k != 'state') .map(([k, v]) => [k, Object.fromEntries(Object.entries(v).map(([k, v]) => [k, v.peak()]))]) .map( - ([k, v]) => `declare const ${k}: Widen<${JSON.stringify(v)}>; + ([k, v]) => `declare const ${k}: WidenRo<${JSON.stringify(v)}>; ` ) .join('\n') @@ -190,9 +190,22 @@ type Widen = T extends string : T extends Array ? Array> : T extends object - ? { [K in keyof T]: Widen } + ? Partial<{ [K in keyof T]: Widen } & {[key: string]: any}> : T; +type WidenRo = T extends string + ? string + : T extends number + ? number + : T extends boolean + ? boolean + : T extends Array + ? Readonly>> + : T extends object + ? Readonly<{ [K in keyof T]: WidenRo }> + : T; + + /** The mutable state of the app */ declare const state: Widen<${JSON.stringify(state)}> & {[key: string]: any};