Compare commits

...

2 Commits

Author SHA1 Message Date
Julien Valverdé
50e360d7ff Fixed SpreadSupertraits
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-20 00:12:19 +01:00
Julien Valverdé
94c4307ad2 Fixed SpreadSupertraits 2024-02-20 00:12:05 +01:00
2 changed files with 9 additions and 25 deletions

View File

@@ -1,4 +1,3 @@
import { Call, Fn, Tuples } from "hotscript"
import { uniq } from "lodash-es"
import { AbstractClass } from "type-fest"
import { Trait, TraitTuple } from "./Trait"
@@ -6,15 +5,15 @@ import { TraitExpression } from "./TraitExpression"
import { Extendable, StaticMembers } from "./util"
type SpreadSupertraits<Traits extends Trait<any, any, any, any>[]> = (
Call<
Tuples.FlatMap<PrependTraitSupertraitsFn>,
Traits
>
type SpreadSupertraits<T> = (
T extends [infer Trait, ...infer Rest]
? [
...Trait.Supertraits<Trait>,
Trait,
...SpreadSupertraits<Rest>,
]
: []
)
interface PrependTraitSupertraitsFn extends Fn {
return: [...Trait.Supertraits<this["arg0"]>, this["arg0"]]
}
type InstanceExtendable<
@@ -81,10 +80,7 @@ class TraitExpressionBuilder<
>[]
>(
...traits: T
): TraitExpressionBuilder<
Superclass,
[...Traits, ...SpreadSupertraits<T>]
> {
) {
return new TraitExpressionBuilder(
this.expressionSuperclass,

View File

@@ -1,9 +1,7 @@
import { AbstractClass, Simplify } from "type-fest"
import { TraitClass } from "./Trait"
import { trait } from "./TraitBuilder"
import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression"
import { expression } from "./TraitExpressionBuilder"
import { Extendable, NonExtendableKeys } from "./util"
const PrintsHelloOnNew = trait
@@ -85,16 +83,6 @@ class User extends exp.extends implements Implements<typeof exp> {
console.log(new User())
abstract class Test {
abstract prout: string
}
const MappedTest = Test as AbstractClass<Test>
class ConcreteTest extends MappedTest {
}
// type T = NonExtendableKeys<[
// { prout: "gneugneu" },
// { prout: string },