TraitsUniq
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-21 03:36:39 +01:00
parent 59cb8646ab
commit f20d1e44c2
2 changed files with 17 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
import { uniq } from "lodash-es"
import { AbstractClass } from "type-fest"
import { AbstractClass, IsEqual } from "type-fest"
import { Trait, TraitTuple } from "./Trait"
import { TraitExpression } from "./TraitExpression"
import { Extendable, StaticMembers } from "./util"
@@ -15,6 +15,21 @@ type SpreadSupertraits<T> = (
: []
)
type TraitsUniq<Traits> = (
Traits extends [...infer Rest, infer Trait]
? IsTraitInTupleFromRight<Rest, Trait> extends true
? TraitsUniq<Rest>
: [...TraitsUniq<Rest>, Trait]
: []
)
type IsTraitInTupleFromRight<Traits, T> = (
Traits extends [...infer Rest, infer Trait]
? IsEqual<Trait, T> extends true
? true
: IsTraitInTupleFromRight<Rest, T>
: false
)
type BuildTraitExpression<
Superclass extends AbstractClass<object>,
@@ -80,7 +95,7 @@ export class TraitExpressionBuilder<
...trait.superExpression.traits,
trait,
]),
]) as [...Traits, ...SpreadSupertraits<T>],
]) as TraitsUniq<[...Traits, ...SpreadSupertraits<T>]>,
)
}

View File

@@ -81,9 +81,3 @@ class User extends exp.extends implements Implements<typeof exp> {
}
console.log(new User())
// type T = NonExtendableKeys<[
// { prout: "gneugneu" },
// { prout: string },
// ]>