@js-toolkit/utils
Advanced tools
Comparing version 1.49.5 to 1.49.6
{ | ||
"name": "@js-toolkit/utils", | ||
"version": "1.49.5", | ||
"version": "1.49.6", | ||
"description": "Typescript helper types and utils", | ||
@@ -5,0 +5,0 @@ "author": "VZH", |
@@ -24,5 +24,5 @@ type NonNullValue = {}; | ||
type IfExtends<T, Type, Then = T, Else = never> = Extract<T, Type> extends never ? Else : Extract<T, Type> extends Type ? Then : Else; | ||
type KeysOfType<A extends AnyObject, B, Strict extends boolean = true> = NonNullable<{ | ||
[P in keyof A]: Strict extends true ? IfExtends<A[P], B, P, never> : A[P] extends B ? P : never; | ||
}[keyof A]>; | ||
type KeysOfType<T extends AnyObject, Type, Strict extends boolean = true> = T extends T ? NonNullable<{ | ||
[P in keyof T]: Strict extends true ? IfExtends<T[P], Type, P, never> : T[P] extends Type ? P : never; | ||
}[keyof T]> : never; | ||
type ExcludeKeysOfType<A extends AnyObject, B, Strict extends boolean = false> = Pick<A, Exclude<keyof A, KeysOfType<A, B, Strict>>>; | ||
@@ -46,6 +46,6 @@ type ExtractKeysOfType<A extends AnyObject, B, Strict extends boolean = false> = Pick<A, KeysOfType<A, B, Strict>>; | ||
}, never | undefined, false>; | ||
type OmitIndex<T extends AnyObject> = { | ||
type OmitIndex<T extends AnyObject> = T extends T ? { | ||
[P in keyof T as string extends P ? never : number extends P ? never : P]: T[P]; | ||
}; | ||
type WithIndex<T extends AnyObject> = T & Record<string, any>; | ||
} : never; | ||
type WithIndex<T extends AnyObject> = T extends T ? T & Record<string, any> : never; | ||
type KeepTypes<A extends AnyObject, T extends Extract<BaseTypeOf<A[keyof A]>, T>, K extends Exclude<Keys<ExcludeTypesOptions<A>>, keyof K> extends never ? never : Exclude<keyof K, Keys<ExcludeTypesOptions<A>>> extends never ? ExcludeTypesOptions<A> : never = { | ||
@@ -56,5 +56,5 @@ pick: keyof A; | ||
}, never | undefined, false>; | ||
type Writeable<A extends AnyObject> = { | ||
-readonly [P in keyof A]: A[P]; | ||
}; | ||
type Writeable<T extends AnyObject> = T extends T ? { | ||
-readonly [P in keyof T]: T[P]; | ||
} : never; | ||
type DeepWriteable<T, Depth extends number = never, R extends unknown[] = [any]> = IfExtends<Exclude<T, AnyFunction>, AnyObject, IfExtends<T, ReadonlyArray<any>, NonNullable<T>, unknown> extends ReadonlyArray<infer I> ? Array<DeepWriteable<I, Depth, R>> : { | ||
@@ -72,23 +72,23 @@ -readonly [P in keyof T]: R['length'] extends Depth ? T[P] : DeepWriteable<T[P], Depth, Push<R, any>>; | ||
}, T>; | ||
type RequiredKeepUndefined<T> = { | ||
type RequiredKeepUndefined<T> = T extends T ? { | ||
[K in keyof T]-?: [T[K]]; | ||
} extends infer U ? U extends Record<keyof U, [any]> ? { | ||
[K in keyof U]: U[K][0]; | ||
} : never : never; | ||
} : never : never : never; | ||
type PromiseType<T> = T extends Promise<infer R> ? R : T; | ||
type RequiredSome<T, K extends keyof T> = Omit<T, K> & { | ||
type RequiredSome<T, K extends keyof T> = T extends T ? Omit<T, K> & { | ||
[P in K]-?: NonNullable<T[P]>; | ||
}; | ||
type RequiredBut<T, K extends keyof T> = Pick<T, K> & { | ||
} : never; | ||
type RequiredBut<T, K extends keyof T> = T extends T ? Pick<T, K> & { | ||
[P in Exclude<keyof T, K>]-?: Exclude<T[P], undefined>; | ||
}; | ||
type RequiredStrict<T> = { | ||
} : never; | ||
type RequiredStrict<T> = T extends T ? { | ||
[P in keyof T]-?: Exclude<T[P], undefined>; | ||
}; | ||
type PartialSome<T, K extends keyof T> = Omit<T, K> & { | ||
} : never; | ||
type PartialSome<T, K extends keyof T> = T extends T ? Omit<T, K> & { | ||
[P in K]?: T[P]; | ||
}; | ||
type PartialBut<T, K extends keyof T> = Pick<T, K> & { | ||
} : never; | ||
type PartialBut<T, K extends keyof T> = T extends T ? Pick<T, K> & { | ||
[P in Exclude<keyof T, K>]?: T[P]; | ||
}; | ||
} : never; | ||
type PartialRecord<K extends keyof any, T> = { | ||
@@ -98,24 +98,24 @@ [P in K]?: T; | ||
/** Useful with `exactOptionalPropertyTypes` option. */ | ||
type OptionalToUndefined<T> = { | ||
type OptionalToUndefined<T> = T extends T ? { | ||
[K in keyof T]: undefined extends T[K] ? T[K] | undefined : T[K]; | ||
}; | ||
type RequiredInner<T, K extends keyof T> = { | ||
} : never; | ||
type RequiredInner<T, K extends keyof T> = T extends T ? { | ||
[P in keyof T]: P extends K ? IfExtends<T[K], AnyObject, Required<T[K]>, T[K]> : T[P]; | ||
}; | ||
type RequiredInnerKeepUndefined<T, K extends keyof T> = { | ||
} : never; | ||
type RequiredInnerKeepUndefined<T, K extends keyof T> = T extends T ? { | ||
[P in keyof T]: P extends K ? IfExtends<T[P], AnyObject, RequiredKeepUndefined<T[P]>, T[P]> : T[P]; | ||
}; | ||
type PickInner<T, K extends keyof T, IK extends keyof NonNullable<T[K]>> = { | ||
} : never; | ||
type PickInner<T, K extends keyof T, IK extends keyof NonNullable<T[K]>> = T extends T ? { | ||
[P in keyof T]: P extends K ? Pick<NonNullable<T[P]>, IK extends Keys<T[P]> ? IK : never> : T[P]; | ||
}; | ||
type OmitInner<T, K extends keyof T, IK extends keyof NonNullable<T[K]>> = { | ||
} : never; | ||
type OmitInner<T, K extends keyof T, IK extends keyof NonNullable<T[K]>> = T extends T ? { | ||
[P in keyof T]: P extends K ? OmitStrict<NonNullable<T[K]>, IK extends Keys<T[K]> ? IK : never> : T[P]; | ||
}; | ||
} : never; | ||
/** Swap key and value */ | ||
type ReverseObject<T extends Record<keyof T, string | number>> = { | ||
type ReverseObject<T extends Record<keyof T, string | number>> = T extends T ? { | ||
[P in keyof T as T[P]]: P; | ||
}; | ||
type LowercaseKeys<T extends AnyObject> = { | ||
} : never; | ||
type LowercaseKeys<T extends AnyObject> = T extends T ? { | ||
[P in keyof T as P extends number ? P : Lowercase<Extract<P, string>>]: T[P]; | ||
}; | ||
} : never; | ||
/** Requires to define all of the keys. */ | ||
@@ -146,5 +146,5 @@ type DefineAll<Enum extends string | number | symbol, T extends Record<Enum, unknown>> = T; | ||
/** Returns union of tuple indices. */ | ||
type TupleIndices<T extends readonly any[]> = Extract<keyof T, `${number}`> extends `${infer N extends number}` ? N : never; | ||
type TupleIndices<T extends readonly any[]> = T extends T ? Extract<keyof T, `${number}`> extends `${infer N extends number}` ? N : never : never; | ||
/** Returns union of tuple values. */ | ||
type TupleToUnion<T extends readonly any[]> = Extract<keyof T, `${number}`> extends `${infer N extends number}` ? T[N] : never; | ||
type TupleToUnion<T extends readonly any[]> = T extends T ? Extract<keyof T, `${number}`> extends `${infer N extends number}` ? T[N] : never : never; | ||
/** | ||
@@ -164,16 +164,16 @@ * Used with discriminants. | ||
*/ | ||
type MapKeyAsArray<T extends AnyObject, K extends keyof T> = { | ||
type MapKeyAsArray<T extends AnyObject, K extends keyof T> = T extends T ? { | ||
[P in keyof T]: P extends K ? readonly T[P][] : T[P]; | ||
}; | ||
} : never; | ||
/** | ||
* Replace getters functions by the same props. | ||
*/ | ||
type GettersToProps<T extends AnyObject> = { | ||
type GettersToProps<T extends AnyObject> = T extends T ? { | ||
[P in keyof T as P extends `get${infer S}` ? Uncapitalize<S> : P]: P extends `get${string}` ? T[P] extends AnyFunction ? ReturnType<T[P]> : T[P] : T[P]; | ||
}; | ||
} : never; | ||
/** | ||
* Replace setters functions by the same props. | ||
*/ | ||
type SettersToProps<T extends AnyObject> = { | ||
type SettersToProps<T extends AnyObject> = T extends T ? { | ||
[P in keyof T as P extends `set${infer S}` ? Uncapitalize<S> : P]: P extends `set${string}` ? T[P] extends (value: infer V) => any ? V : T[P] : T[P]; | ||
}; | ||
} : never; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
76643