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

View File

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