export type SiftNone = { readonly __none__: unique symbol } export type ExcludeNone = Exclude export type ObjectKey = string | number | symbol export type AnySet = Set export type FromEntries = { [P in T[number][0]]: Extract[1] } export type ReadonlyDeep = T extends (infer U)[] ? ReadonlyDeepArray : T extends Callback ? T : T extends object ? ReadonlyDeepObject : T export type ObjectFromKeyValueArrays< Keys extends Array, Values extends Array > = ObjectFromKeyValuePairs> export type ReplaceType = F extends T ? Exclude | R : T export type TryIndex = K extends keyof T ? T[K] : undefined interface ReadonlyDeepArray extends ReadonlyArray> {} type ReadonlyDeepObject = { readonly [P in keyof T]: ReadonlyDeep } type KeyValuePairsFromLists< Keys extends Array, Values extends Array > = { [index in keyof Keys]: index extends keyof Values ? [Keys[index], Values[index]] : never } type ObjectFromKeyValuePairs< KV extends [ObjectKey, any][], T = { [index in keyof KV]: KV[index] extends [ObjectKey, any] ? Record : never } > = UnionToIntersection