Skip to content

Commit

Permalink
Cleanup util types
Browse files Browse the repository at this point in the history
  • Loading branch information
colinhacks committed Apr 13, 2024
1 parent 3575727 commit edc5ddf
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 22 deletions.
23 changes: 12 additions & 11 deletions deno/lib/helpers/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,20 +104,21 @@ export namespace objectUtil {
type optionalKeys<T extends object> = {
[k in keyof T]: undefined extends T[k] ? k : never;
}[keyof T];

type requiredKeys<T extends object> = {
[k in keyof T]: undefined extends T[k] ? never : k;
}[keyof T];

// export type addQuestionMarks<
// T extends object,
// R extends keyof T = requiredKeys<T>
// > = Pick<Required<T>, R> & Partial<T>;
export type addQuestionMarks<
T extends object,
R extends keyof T = requiredKeys<T>,
O extends keyof T = optionalKeys<T>
> = Pick<T, R> & Partial<Pick<T, O>> & { [k in keyof T]?: unknown };
type optionalUnknown<K extends string | number | symbol> = {
[k in K]?: unknown;
};
type pickRequired<T extends object, R extends keyof T = requiredKeys<T>> = {
[k in R]: T[k];
};
type pickOptional<T extends object, O extends keyof T = optionalKeys<T>> = {
[k in O]?: T[k];
};
export type addQuestionMarks<T extends object> = pickRequired<T> &
pickOptional<T> &
optionalUnknown<keyof T>;

export type identity<T> = T;
export type flatten<T> = identity<{ [k in keyof T]: T[k] }>;
Expand Down
23 changes: 12 additions & 11 deletions src/helpers/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,20 +104,21 @@ export namespace objectUtil {
type optionalKeys<T extends object> = {
[k in keyof T]: undefined extends T[k] ? k : never;
}[keyof T];

type requiredKeys<T extends object> = {
[k in keyof T]: undefined extends T[k] ? never : k;
}[keyof T];

// export type addQuestionMarks<
// T extends object,
// R extends keyof T = requiredKeys<T>
// > = Pick<Required<T>, R> & Partial<T>;
export type addQuestionMarks<
T extends object,
R extends keyof T = requiredKeys<T>,
O extends keyof T = optionalKeys<T>
> = Pick<T, R> & Partial<Pick<T, O>> & { [k in keyof T]?: unknown };
type optionalUnknown<K extends string | number | symbol> = {
[k in K]?: unknown;
};
type pickRequired<T extends object, R extends keyof T = requiredKeys<T>> = {
[k in R]: T[k];
};
type pickOptional<T extends object, O extends keyof T = optionalKeys<T>> = {
[k in O]?: T[k];
};
export type addQuestionMarks<T extends object> = pickRequired<T> &
pickOptional<T> &
optionalUnknown<keyof T>;

export type identity<T> = T;
export type flatten<T> = identity<{ [k in keyof T]: T[k] }>;
Expand Down

0 comments on commit edc5ddf

Please sign in to comment.