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."