oak-domain/lib/types/Polyfill.d.ts

24 lines
698 B
TypeScript

export type OmitInferKey<T, R> = {
[K in keyof T as T extends R ? never : K]: T[K];
};
export type OmitInferValue<T, R> = {
[K in keyof T as T extends R ? never : K]: T[K];
};
export type ValueOf<Obj> = Obj[keyof Obj];
export type OneOnly<Obj, Key extends keyof Obj> = {
[key in Exclude<keyof Obj, Key>]?: undefined;
} & Pick<Obj, Key>;
export type OneOfByKey<Obj> = {
[key in keyof Obj]: OneOnly<Obj, key>;
};
export type OneOf<Obj> = ValueOf<OneOfByKey<Obj>>;
type IsOptional<T, K extends keyof T> = {
[K1 in Exclude<keyof T, K>]: T[K1];
} & {
K?: T[K];
} extends T ? K : never;
export type OptionalKeys<T> = {
[K in keyof T]: IsOptional<T, K>;
}[keyof T];
export {};