diff --git a/src/Trait.ts b/src/Trait.ts index c049304..1612d03 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -14,7 +14,9 @@ export type AddAbstractToImplClass< StaticAbstract extends {}, > = ( Class< - Abstract & InstanceType, + Abstract & + InstanceType, + ConstructorParameters > & StaticAbstract & @@ -22,7 +24,7 @@ export type AddAbstractToImplClass< ) export type RemoveAbstractFromImplClass< - ImplClassWithAbstract extends Class & { _tag: TraitApplierSuperTag }, + ImplClassWithAbstract extends Class & StaticAbstract & { _tag: TraitApplierSuperTag }, Abstract extends {}, StaticAbstract extends {}, > = ( @@ -153,11 +155,11 @@ export namespace Trait { export function trait< Abstract extends {}, StaticAbstract extends {}, - ImplClassWithAbstract extends Class & { _tag: TraitApplierSuperTag }, + ImplClassWithAbstract extends Class & StaticAbstract & { _tag: TraitApplierSuperTag }, >( abstract: Opaque, staticAbstract: Opaque, - apply: (Super: AbstractClass & { _tag: TraitApplierSuperTag }) => ImplClassWithAbstract, + apply: (Super: AbstractClass & StaticAbstract & { _tag: TraitApplierSuperTag }) => ImplClassWithAbstract, ) { return new Trait( emptyTraitExpression, diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 0c0f0f0..d3ea079 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -55,7 +55,7 @@ export class TraitExpression< This extends TraitExpression, SubtraitAbstract extends Implements, SubtraitStaticAbstract extends ImplementsStatic, - SubtraitImplClassWithAbstract extends Class & { _tag: TraitApplierSuperTag }, + SubtraitImplClassWithAbstract extends Class & SubtraitStaticAbstract & { _tag: TraitApplierSuperTag }, >( this: This, abstract: (expression: This) => Opaque,