From bb1ae3b48f5955258aed7f3720147dec87cce9df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 22:50:06 +0100 Subject: [PATCH] Trait refactoring --- src/Trait.ts | 2 +- src/TraitBuilder.ts | 2 +- src/TraitExpression.ts | 14 +++++++------- src/TraitExpressionBuilder.ts | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Trait.ts b/src/Trait.ts index 9d43662..63109a6 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -6,7 +6,7 @@ import { Extend, StaticMembers } from "./util" export class Trait< SuperExpression extends TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, Abstract extends object, StaticAbstract extends object, diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index b0e4f3c..abe27ae 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -10,7 +10,7 @@ declare const implSuperSymbol: unique symbol export class TraitBuilder< SuperExpression extends TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, Abstract extends object, StaticAbstract extends object, diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 62b3624..44367d0 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -6,7 +6,7 @@ import { Extend, StaticMembers } from "./util" export class TraitExpression< Superclass extends AbstractClass, - const Traits extends Trait[], + const Traits extends readonly Trait[], > { constructor( readonly superclass: Superclass, @@ -95,7 +95,7 @@ export namespace TraitExpression { export type Implements< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( Simplify< Extend< @@ -107,7 +107,7 @@ export type Implements< ) export type StaticImplements< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( Simplify< Extend< @@ -120,7 +120,7 @@ export type StaticImplements< export type TraitExpressionClass< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( AbstractClass< TraitExpressionInstance, @@ -130,7 +130,7 @@ export type TraitExpressionClass< ) export type TraitExpressionConcreteClass< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( Class< TraitExpressionInstance, @@ -140,7 +140,7 @@ export type TraitExpressionConcreteClass< ) export type TraitExpressionInstance< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( InstanceType> & // Keep the instance of the superclass outside of any kind of type manipulation // as it can accidentely remove abstract properties @@ -152,7 +152,7 @@ export type TraitExpressionInstance< ) export type TraitExpressionStaticMembers< - Exp extends TraitExpression[]> + Exp extends TraitExpression[]> > = ( Simplify< Extend<[ diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index aa9acec..94e6ff2 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -7,7 +7,7 @@ import { Extendable, StaticMembers } from "./util" export class TraitExpressionBuilder< Superclass extends AbstractClass, - const Traits extends Trait[], + const Traits extends readonly Trait[], > { declare ["constructor"]: typeof TraitExpressionBuilder @@ -21,7 +21,7 @@ export class TraitExpressionBuilder< const T extends Trait< TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, any, any, @@ -40,7 +40,7 @@ export class TraitExpressionBuilder< const T extends Trait< TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, any, any, @@ -68,7 +68,7 @@ export class TraitExpressionBuilder< const T extends Trait< TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, any, any, @@ -94,7 +94,7 @@ export class TraitExpressionBuilder< const T extends Trait< TraitExpression< typeof TraitExpression.NullSuperclass, - Trait[] + readonly Trait[] >, any, any, @@ -194,7 +194,7 @@ export namespace TraitExpressionBuilder { export type BuildTraitExpression< Superclass extends AbstractClass, - Traits extends Trait[], + Traits extends readonly Trait[], > = ( Extendable> extends false ? "Type conflict between the traits abstract definitions."