| 1 | export type Id<T> = { [K in keyof T]: T[K] } & {}
|
|---|
| 2 | export type WithRequiredProp<T, K extends keyof T> = Omit<T, K> &
|
|---|
| 3 | Required<Pick<T, K>>
|
|---|
| 4 | export type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never
|
|---|
| 5 | export function assertCast<T>(v: any): asserts v is T {}
|
|---|
| 6 |
|
|---|
| 7 | export function safeAssign<T extends object>(
|
|---|
| 8 | target: T,
|
|---|
| 9 | ...args: Array<Partial<NoInfer<T>>>
|
|---|
| 10 | ): T {
|
|---|
| 11 | return Object.assign(target, ...args)
|
|---|
| 12 | }
|
|---|
| 13 |
|
|---|
| 14 | /**
|
|---|
| 15 | * Convert a Union type `(A|B)` to an intersection type `(A&B)`
|
|---|
| 16 | */
|
|---|
| 17 | export type UnionToIntersection<U> = (
|
|---|
| 18 | U extends any ? (k: U) => void : never
|
|---|
| 19 | ) extends (k: infer I) => void
|
|---|
| 20 | ? I
|
|---|
| 21 | : never
|
|---|
| 22 |
|
|---|
| 23 | export type NonOptionalKeys<T> = {
|
|---|
| 24 | [K in keyof T]-?: undefined extends T[K] ? never : K
|
|---|
| 25 | }[keyof T]
|
|---|
| 26 |
|
|---|
| 27 | export type HasRequiredProps<T, True, False> =
|
|---|
| 28 | NonOptionalKeys<T> extends never ? False : True
|
|---|
| 29 |
|
|---|
| 30 | export type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>
|
|---|
| 31 |
|
|---|
| 32 | export type NoInfer<T> = [T][T extends any ? 0 : never]
|
|---|
| 33 |
|
|---|
| 34 | export type NonUndefined<T> = T extends undefined ? never : T
|
|---|
| 35 |
|
|---|
| 36 | export type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T
|
|---|
| 37 |
|
|---|
| 38 | export type MaybePromise<T> = T | PromiseLike<T>
|
|---|
| 39 |
|
|---|
| 40 | export type OmitFromUnion<T, K extends keyof T> = T extends any
|
|---|
| 41 | ? Omit<T, K>
|
|---|
| 42 | : never
|
|---|
| 43 |
|
|---|
| 44 | export type IsAny<T, True, False = never> = true | false extends (
|
|---|
| 45 | T extends never ? true : false
|
|---|
| 46 | )
|
|---|
| 47 | ? True
|
|---|
| 48 | : False
|
|---|
| 49 |
|
|---|
| 50 | export type CastAny<T, CastTo> = IsAny<T, CastTo, T>
|
|---|