export type OptionalProps<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
export type ValueOf<T> = T[keyof T];
export type MapToTypeTuple<T extends Record<K, string>, K extends keyof T> = T extends any ? {
    type: T[K];
    value: T;
} : never;
export type Distinct<T, DistinctName> = T & {
    __TYPE__: DistinctName;
};
export declare const makeArrayOfAll: <T>() => <U extends T[]>(array: U & ([T] extends [U[number]] ? unknown : "__invalid-type__")) => U & ([T] extends [U[number]] ? unknown : "__invalid-type__");
export type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
export type LookupByDiscriminate<UnionType, Key extends keyof UnionType, Value extends UnionType[Key]> = UnionType extends Record<Key, Value> ? UnionType : never;
export type KeysOfUnion<T> = T extends T ? keyof T : never;
export type RequiredKeys<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
export type DeepWriteable<T> = T extends object ? {
    -readonly [P in keyof T]: DeepWriteable<T[P]>;
} : T extends Array<any> ? Array<DeepWriteable<T[number]>> : T;
export type DeepReadonly<T> = T extends (infer R)[] ? ReadonlyArray<DeepReadonly<R>> : T extends object ? {
    readonly [P in keyof T]: DeepReadonly<T[P]>;
} : T;
//# sourceMappingURL=ts-type-helpers.d.ts.map