Expresses work

This commit is contained in:
Julien Valverdé
2024-01-31 05:21:56 +01:00
parent ff3991ae45
commit 11335f10cd

View File

@@ -1,6 +1,6 @@
import { Fn, Pipe, Tuples } from "hotscript" import { Call, Fn, Pipe, Tuples } from "hotscript"
import { AbstractClass, Opaque, Simplify } from "type-fest" import { AbstractClass, Opaque, Simplify } from "type-fest"
import { Trait, TraitAbstractMembersFn, TraitApplierSuperTag } from "." import { Trait, TraitAbstractMembersFn, TraitApplierSuperTag, TraitImplInstanceFn } from "."
import { ExtendFn } from "./util" import { ExtendFn } from "./util"
@@ -13,7 +13,16 @@ class TraitsExpression<
readonly traits: Traits, readonly traits: Traits,
) {} ) {}
extends() { extends(): (
AbstractClass<
Call<ExtendFn, [
InstanceType<Super>,
...Call<Tuples.Map<TraitImplInstanceFn>, Traits>,
]>,
ConstructorParameters<Super>
>
) {
return this.traits.reduce( return this.traits.reduce(
(previous, trait) => trait.apply(previous), (previous, trait) => trait.apply(previous),
this.superclass as Opaque<Super, TraitApplierSuperTag>, this.superclass as Opaque<Super, TraitApplierSuperTag>,