diff --git a/deno/lib/helpers/util.ts b/deno/lib/helpers/util.ts index c7b4e6d6c..68e42907e 100644 --- a/deno/lib/helpers/util.ts +++ b/deno/lib/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] }>; 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] }>;