Added comments
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2023-12-28 21:39:17 +01:00
parent d759b2cbba
commit b248f878a1

View File

@@ -3,13 +3,15 @@ import { AbstractClass, AbstractConstructor, Opaque, UnionToIntersection } from
/**
* Represents the static members of a class.
*
* @template C - The type of the class for which static members are extracted.
* @typeparam The static members of the class.
* @template C - The class type.
*/
export type StaticMembers<C> = Pick<C, keyof C>
/**
* Represents a trait that can be applied to a class.
* @template C - The abstract class type.
*/
export type Trait<
C extends AbstractClass<any>
> = Opaque<
@@ -17,17 +19,31 @@ export type Trait<
"thilatrait/Trait"
>
/**
* Represents the function signature for applying a trait to a parent class.
* @template C - The abstract class type.
*/
export type TraitApplier<
C extends AbstractClass<any>
> =
(Parent: AbstractConstructor<any>) => C
/**
* Unwraps the type of the class from a given trait.
* @template T - The trait type.
*/
export type UnwrapTraitC<T> =
T extends Trait<infer C>
? C
: never
/**
* Creates a trait instance using the provided trait applier function.
* @template C - The abstract class type.
* @param applier - The trait applier function.
* @returns A trait instance.
*/
export function trait<
C extends AbstractClass<any>
>(
@@ -37,6 +53,14 @@ export function trait<
}
/**
* Extends a class with the given traits and expresses their combined functionality.
* @template C - The abstract class type.
* @template Traits - An array of trait instances.
* @param extend - The class to extend.
* @param traits - An array of trait instances to apply.
* @returns A new class type expressing the combined functionality of the base class and traits.
*/
export function extendsAndExpresses<
C extends AbstractClass<any>,
Traits extends readonly Trait<any>[],
@@ -72,6 +96,12 @@ export function extendsAndExpresses<
)
}
/**
* Expresses the combined functionality of multiple traits.
* @template Traits - An array of trait instances.
* @param traits - An array of trait instances to apply.
* @returns A new class type expressing the combined functionality of the traits.
*/
export function expresses<
Traits extends readonly Trait<any>[],
>(