UNPKG

warscript

Version:

A typescript library for Warcraft III using Warpack.

40 lines (39 loc) 1.63 kB
/** @noSelfInFile */ export type AnyNonNullable = {}; export type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false; export type NonEmptyArray<T> = [T, ...T[]]; export type InvertRecordType<T extends Record<PropertyKey, PropertyKey | null | undefined>> = { [P in keyof T as NonNullable<T[P]>]: P; }; export type Constructor<T = any> = new (...args: any) => T; export type AbstractConstructor<T = any> = abstract new (...args: any) => T; export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>; export type ValueOf<T> = T[keyof T]; export type EntryOf<T> = ValueOf<{ [K in keyof T]: [K, T[K]]; }>; export type MutableKeys<T extends object> = { [P in keyof T]-?: IfEquals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }, P>; }[keyof T]; export type ReadonlyKeys<T extends object> = { [P in keyof T]-?: IfEquals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }, never, P>; }[keyof T]; type IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? A : B; export type TupleOf<T, N extends number> = N extends N ? number extends N ? T[] : _TupleOf<T, N, []> : never; type _TupleOf<T, N extends number, R extends unknown[]> = R["length"] extends N ? R : _TupleOf<T, N, [T, ...R]>; export type Flatten<T extends readonly any[], A extends readonly any[] = []> = T extends [ infer F, ...infer R ] ? Flatten<R, F extends readonly any[] ? [...A, ...F] : [...A, F]> : A; export type Prohibit<T, K extends keyof any> = T & { [P in K]?: never; }; export {};