0.1.3 #4
@@ -1,69 +1,6 @@
|
|||||||
import { AbstractClass, Class as ConcreteClass } from "type-fest"
|
import { AbstractClass } from "type-fest"
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the possible types of a class.
|
|
||||||
*/
|
|
||||||
export type ClassType = "AbstractClass" | "Class"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a class based on the specified type.
|
|
||||||
* @template Type - The type of the class ("AbstractClass" or "Class").
|
|
||||||
* @template T - The type parameter of the class.
|
|
||||||
* @template Arguments - The type of arguments the class constructor takes.
|
|
||||||
*/
|
|
||||||
export type Class<
|
|
||||||
Type extends ClassType,
|
|
||||||
T,
|
|
||||||
Arguments extends unknown[] = any[],
|
|
||||||
> = (
|
|
||||||
Type extends "AbstractClass"
|
|
||||||
? AbstractClass<T, Arguments>
|
|
||||||
: Type extends "Class"
|
|
||||||
? ConcreteClass<T, Arguments>
|
|
||||||
: never
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the type of a class (either "Class" or "AbstractClass").
|
|
||||||
* @template C - The class type to determine.
|
|
||||||
*/
|
|
||||||
export type GetClassType<C> = (
|
|
||||||
C extends ConcreteClass<any>
|
|
||||||
? "Class"
|
|
||||||
: C extends AbstractClass<any>
|
|
||||||
? "AbstractClass"
|
|
||||||
: never
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an array of instances corresponding to the provided classes.
|
|
||||||
* @template Classes - An array of classes extending AbstractClass.
|
|
||||||
*/
|
|
||||||
export type ClassesInstances<Classes extends readonly AbstractClass<any>[]> = (
|
|
||||||
Classes extends [infer Class, ...infer Rest]
|
|
||||||
? Class extends AbstractClass<any>
|
|
||||||
? Rest extends AbstractClass<any>[]
|
|
||||||
? [InstanceType<Class>, ...ClassesInstances<Rest>]
|
|
||||||
: never
|
|
||||||
: never
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an intersection of instances of the provided classes.
|
|
||||||
* @template Classes - An array of classes extending AbstractClass.
|
|
||||||
*/
|
|
||||||
export type ClassesInstancesIntersection<Classes extends readonly AbstractClass<any>[]> = (
|
|
||||||
Classes extends [infer Class, ...infer Rest]
|
|
||||||
? Class extends AbstractClass<any>
|
|
||||||
? Rest extends AbstractClass<any>[]
|
|
||||||
? InstanceType<Class> & ClassesInstancesIntersection<Rest>
|
|
||||||
: never
|
|
||||||
: never
|
|
||||||
: {}
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the static members of a class.
|
* Represents the static members of a class.
|
||||||
* @template Class - A class extending AbstractClass.
|
* @template Class - A class extending AbstractClass.
|
||||||
@@ -71,31 +8,3 @@ export type ClassesInstancesIntersection<Classes extends readonly AbstractClass<
|
|||||||
export type StaticMembers<Class extends AbstractClass<any>> = (
|
export type StaticMembers<Class extends AbstractClass<any>> = (
|
||||||
Omit<Class, "prototype">
|
Omit<Class, "prototype">
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an array of static members corresponding to the provided classes.
|
|
||||||
* @template Classes - An array of classes extending AbstractClass.
|
|
||||||
*/
|
|
||||||
export type ClassesStaticMembers<Classes extends readonly AbstractClass<any>[]> = (
|
|
||||||
Classes extends [infer Class, ...infer Rest]
|
|
||||||
? Class extends AbstractClass<any>
|
|
||||||
? Rest extends AbstractClass<any>[]
|
|
||||||
? [StaticMembers<Class>, ...ClassesStaticMembers<Rest>]
|
|
||||||
: never
|
|
||||||
: never
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an intersection of static members of the provided classes.
|
|
||||||
* @template Classes - An array of classes extending AbstractClass.
|
|
||||||
*/
|
|
||||||
export type ClassesStaticMembersIntersection<Classes extends readonly AbstractClass<any>[]> = (
|
|
||||||
Classes extends [infer Class, ...infer Rest]
|
|
||||||
? Class extends AbstractClass<any>
|
|
||||||
? Rest extends AbstractClass<any>[]
|
|
||||||
? StaticMembers<Class> & ClassesStaticMembersIntersection<Rest>
|
|
||||||
: never
|
|
||||||
: never
|
|
||||||
: {}
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
export function identity<T>(value: T) {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user