From d5c286cd9f19b3bcf9462210abbaacbfd5062897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Mon, 31 Jul 2023 10:17:02 +0200 Subject: [PATCH 1/2] perf: speed up `addQuestionMarks` --- deno/lib/helpers/util.ts | 18 ++++++++++++++++++ src/helpers/util.ts | 27 ++++++++++++++------------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/deno/lib/helpers/util.ts b/deno/lib/helpers/util.ts index c7b4e6d6c..185a345e0 100644 --- a/deno/lib/helpers/util.ts +++ b/deno/lib/helpers/util.ts @@ -101,6 +101,7 @@ export namespace objectUtil { [k in Exclude]: U[k]; } & V; +<<<<<<< HEAD type optionalKeys = { [k in keyof T]: undefined extends T[k] ? k : never; }[keyof T]; @@ -115,6 +116,23 @@ export namespace objectUtil { }; export type addQuestionMarks = pickRequired & pickOptional & { [k in keyof T]?: unknown }; +======= + // type optionalKeys = { + // [k in keyof T]: undefined extends T[k] ? k : never; + // }[keyof T]; + + type keepRequiredKeys = { + [k in keyof T as undefined extends T[k] ? never : k]-?: T[k]; + }; + + // type alkjsdf = addQuestionMarks<{ a: any }>; + + export type addQuestionMarks< + T extends object + // O extends keyof T = optionalKeys + > = keepRequiredKeys & Partial; + // = { [k in O]?: T[k] } & { [k in R]: T[k] }; +>>>>>>> 0483a8e (perf: speed up `addQuestionMarks`) export type identity = T; export type flatten = identity<{ [k in keyof T]: T[k] }>; diff --git a/src/helpers/util.ts b/src/helpers/util.ts index c7b4e6d6c..68e42907e 100644 --- a/src/helpers/util.ts +++ b/src/helpers/util.ts @@ -101,20 +101,21 @@ export namespace objectUtil { [k in Exclude]: U[k]; } & V; - type optionalKeys = { - [k in keyof T]: undefined extends T[k] ? k : never; - }[keyof T]; - type requiredKeys = { - [k in keyof T]: undefined extends T[k] ? never : k; - }[keyof T]; - type pickRequired> = { - [k in R]: T[k]; - }; - type pickOptional> = { - [k in O]?: T[k]; + // type optionalKeys = { + // [k in keyof T]: undefined extends T[k] ? k : never; + // }[keyof T]; + + type keepRequiredKeys = { + [k in keyof T as undefined extends T[k] ? never : k]-?: T[k]; }; - export type addQuestionMarks = pickRequired & - pickOptional & { [k in keyof T]?: unknown }; + + // type alkjsdf = addQuestionMarks<{ a: any }>; + + export type addQuestionMarks< + T extends object + // O extends keyof T = optionalKeys + > = keepRequiredKeys & Partial; + // = { [k in O]?: T[k] } & { [k in R]: T[k] }; export type identity = T; export type flatten = identity<{ [k in keyof T]: T[k] }>; From 936900b05932035e4ecebb841f33373eeec77fc9 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Mon, 15 Apr 2024 22:20:13 -0700 Subject: [PATCH 2/2] Build deno --- deno/lib/helpers/util.ts | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/deno/lib/helpers/util.ts b/deno/lib/helpers/util.ts index 185a345e0..68e42907e 100644 --- a/deno/lib/helpers/util.ts +++ b/deno/lib/helpers/util.ts @@ -101,22 +101,6 @@ export namespace objectUtil { [k in Exclude]: U[k]; } & V; -<<<<<<< HEAD - type optionalKeys = { - [k in keyof T]: undefined extends T[k] ? k : never; - }[keyof T]; - type requiredKeys = { - [k in keyof T]: undefined extends T[k] ? never : k; - }[keyof T]; - type pickRequired> = { - [k in R]: T[k]; - }; - type pickOptional> = { - [k in O]?: T[k]; - }; - export type addQuestionMarks = pickRequired & - pickOptional & { [k in keyof T]?: unknown }; -======= // type optionalKeys = { // [k in keyof T]: undefined extends T[k] ? k : never; // }[keyof T]; @@ -132,7 +116,6 @@ export namespace objectUtil { // O extends keyof T = optionalKeys > = keepRequiredKeys & Partial; // = { [k in O]?: T[k] } & { [k in R]: T[k] }; ->>>>>>> 0483a8e (perf: speed up `addQuestionMarks`) export type identity = T; export type flatten = identity<{ [k in keyof T]: T[k] }>;