Skip to content

Commit 16ae900

Browse files
committed
Improve the Omit helper type (#31153)
1 parent 7f004ad commit 16ae900

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

lib/lib.es5.d.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1463,10 +1463,17 @@ type Exclude<T, U> = T extends U ? never : T;
14631463
*/
14641464
type Extract<T, U> = T extends U ? T : never;
14651465

1466+
export type KnownKeys<T> = {
1467+
[K in keyof T]: string extends K ? never : number extends K ? never : K
1468+
} extends { [_ in keyof T]: infer U } ? ({} extends U ? never : U) : never;
1469+
type OmitFromKnownKeys<T, K extends keyof T> = KnownKeys<T> extends infer U ?
1470+
[U] extends [keyof T] ? Pick<T, Exclude<U, K>> : never : never;
14661471
/**
14671472
* Construct a type with the properties of T except for those in type K.
14681473
*/
1469-
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
1474+
type Omit<T, K extends keyof T> = OmitFromKnownKeys<T, K>
1475+
& (string extends K ? {} : (string extends keyof T ? { [n: string]: T[Exclude<keyof T, number>]} : {}))
1476+
& (number extends K ? {} : (number extends keyof T ? { [n: number]: T[Exclude<keyof T, string>]} : {}));
14701477

14711478
/**
14721479
* Exclude null and undefined from T

0 commit comments

Comments
 (0)