diff --git a/src/index.ts b/src/index.ts index 99c2e37a..116bd504 100644 --- a/src/index.ts +++ b/src/index.ts @@ -331,36 +331,6 @@ export type ArrayTranspose< }; }; -export type Matrix2 = ArrayTranspose< - [[1, Optional, Nullable, 3], [4, 5, 6]] ->; // [[1, 4], [true, 5], [3, 6]] - -export type AlterKeyTypeWith, R> = Pick< - T, - Exclude, K> -> & { [P in K]: R }; - -export type SwapKeysWithVals, Keys>> = { - [P in T[Keys]]: { - [K in Keys]: T[K] extends P ? K : never; - }[keyof T]; -}; - -export type Stretch = T extends object - ? T extends infer P - ? { [K in Keys

]: Stretch } - : never - : T; - -export type TypeGuard = (U: unknown) => U is T; - -export type FilterBy = { - [K in Keys]: K extends P ? K : never; -}[Keys]; - -export type PickBy = Pick>; -export type OmitBy = Omit>; - /** * Represents a export type that filters elements from an array based on a given predicate export type. * @typeParam T The array to filter. @@ -381,25 +351,6 @@ export type ArrayFilter = T extends [ : ArrayFilter : []; -export type EmptyObject = NonNullable; -export type EmptyObject3 = Exclude; -export type EmptyObject2 = Record; -export type OptionalKeys = { - [K in Keys]-?: EmptyObject extends Pick ? K : never; -}[keyof T]; - -export type DeepOptionalKeys = { - [K in Keys]-?: EmptyObject extends Pick ? OptionalKeys : never; -}[keyof T]; - -export type RequiredKeys = { - [K in Keys]-?: EmptyObject extends Pick ? never : K; -}[keyof T]; - -export type DeepRequiredKeys = { - [K in Keys]-?: EmptyObject extends Pick ? never : RequiredKeys; -}[keyof T]; - /** * Retrieves the keys that are mutable from an object of export type T. * @example @@ -462,28 +413,6 @@ export type TestType = ReturnType< typeof _testType >; -/* class is fucking lockedin ong! */ -export function locked(constructor: Newable): void { - const _sealAndFreeze = (obj: object): void => { - Object.seal(obj); - Object.freeze(obj); - Object.preventExtensions(obj); - }; - _sealAndFreeze(constructor); - _sealAndFreeze(constructor.prototype); -} - -export function final(target: T): T { - return class Final extends target { - constructor(...args: any[]) { - if (new.target !== Final) { - throw new Error(`${target.name} is final, you cannot extend it`); - } - super(...args); - } - }; -} - /** * Represents a export type that checks if a specified element export type exists within an array. * @typeParam T The array export type to search within. @@ -520,3 +449,69 @@ export type UniqueArray = T extends [ ? UniqueArray : UniqueArray : R; + +export type EmptyObject = NonNullable; + +export type AlterKeyTypeWith, R> = Pick< + T, + Exclude, K> +> & { [P in K]: R }; + +export type SwapKeysWithVals, Keys>> = { + [P in T[Keys]]: { + [K in Keys]: T[K] extends P ? K : never; + }[keyof T]; +}; + +export type Stretch = T extends object + ? T extends infer P + ? { [K in Keys

]: Stretch } + : never + : T; + +export type TypeGuard = (U: unknown) => U is T; + +export type FilterBy = { + [K in Keys]: K extends P ? K : never; +}[Keys]; + +export type PickBy = Pick>; +export type OmitBy = Omit>; + +export type OptionalKeys = { + [K in Keys]-?: EmptyObject extends Pick ? K : never; +}[keyof T]; + +export type DeepOptionalKeys = { + [K in Keys]-?: EmptyObject extends Pick ? OptionalKeys : never; +}[keyof T]; + +export type RequiredKeys = { + [K in Keys]-?: EmptyObject extends Pick ? never : K; +}[keyof T]; + +export type DeepRequiredKeys = { + [K in Keys]-?: EmptyObject extends Pick ? never : RequiredKeys; +}[keyof T]; + +/* class is fucking lockedin ong! */ +export function locked(constructor: Newable): void { + const _sealAndFreeze = (obj: object): void => { + Object.seal(obj); + Object.freeze(obj); + Object.preventExtensions(obj); + }; + _sealAndFreeze(constructor); + _sealAndFreeze(constructor.prototype); +} + +export function final(target: T): T { + return class Final extends target { + constructor(...args: any[]) { + if (new.target !== Final) { + throw new Error(`${target.name} is final, you cannot extend it`); + } + super(...args); + } + }; +}