override
La fonction createOverride() permet d’enregistrer des modifications (valeurs par défaut et/ou méthodes) qui seront appliquées lors de la création d’un objet.
Le pattern typique est :
- créer l’objet de base
- appeler
overrideHandler.apply(self)juste avant de le retourner - depuis un autre module, enregistrer des overrides via
setPropertyDefaultValue/setMethod
Cet outil est beaucoup utilisé dans dataParser pour permettre d’ajouter/altérer des capacités sans modifier l’implémentation du parser.
WARNING
Les overrides sont stockés dans un store global (valide dans tout le process) : le dernier override appliqué sur une même propriété/méthode gagne.
Exemple interactif
Syntaxe
typescript
interface OverrideHandler<
GenericInterface extends object
> {
setMethod<
GenericProperty extends keyof GenericInterface
>(
prop: GenericProperty,
theFunction: (
self: GenericInterface,
...args: any[]
) => any
): void;
setPropertyDefaultValue<
GenericProperty extends keyof GenericInterface
>(
prop: GenericProperty,
value: any
): void;
apply(overrideInterface: GenericInterface): GenericInterface;
}
function createOverride<
GenericInterface extends object
>(overrideName: string): OverrideHandler<GenericInterface>;Notes d’usage
overrideName: choisissez un nom unique (souvent un identifiant namespacé du style@duplojs/utils/...).apply(self): applique les overrides et retourne un nouvel objetself(avec méthodes wrapées pour recevoir le bonself).setMethod(...): la fonction reçoitselfen premier paramètre, ce qui permet d’éviter les problèmes dethiset de référencer les propriétés overridées.setPropertyDefaultValue(...): définit une valeur appliquée à la création (et peut écraser une valeur existante).
Voir aussi
builder- Pattern similaire “déclarer puis configurer”globalStore- Stockage global par process
