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.
|
||||
* @template Class - A class extending AbstractClass.
|
||||
@@ -71,31 +8,3 @@ export type ClassesInstancesIntersection<Classes extends readonly AbstractClass<
|
||||
export type StaticMembers<Class extends AbstractClass<any>> = (
|
||||
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