This commit is contained in:
@@ -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>]>,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -81,9 +81,3 @@ class User extends exp.extends implements Implements<typeof exp> {
|
||||
}
|
||||
|
||||
console.log(new User())
|
||||
|
||||
|
||||
// type T = NonExtendableKeys<[
|
||||
// { prout: "gneugneu" },
|
||||
// { prout: string },
|
||||
// ]>
|
||||
|
||||
Reference in New Issue
Block a user