Skip to content

Commit

Permalink
fix: support any number of args on mixins helper (#433)
Browse files Browse the repository at this point in the history
  • Loading branch information
ktsn committed Jul 20, 2020
1 parent 59d1dd4 commit 4c7f651
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/util.ts
Expand Up @@ -32,12 +32,21 @@ export function createDecorator (factory: (options: ComponentOptions<Vue>, key:
}
}

export function mixins <A> (CtorA: VueClass<A>): VueClass<A>
export function mixins <A, B> (CtorA: VueClass<A>, CtorB: VueClass<B>): VueClass<A & B>
export function mixins <A, B, C> (CtorA: VueClass<A>, CtorB: VueClass<B>, CtorC: VueClass<C>): VueClass<A & B & C>
export function mixins <A, B, C, D> (CtorA: VueClass<A>, CtorB: VueClass<B>, CtorC: VueClass<C>, CtorD: VueClass<D>): VueClass<A & B & C & D>
export function mixins <A, B, C, D, E> (CtorA: VueClass<A>, CtorB: VueClass<B>, CtorC: VueClass<C>, CtorD: VueClass<D>, CtorE: VueClass<E>): VueClass<A & B & C & D & E>
export function mixins <T> (...Ctors: VueClass<Vue>[]): VueClass<T>
export type UnionToIntersection<U> = (U extends any
? (k: U) => void
: never) extends (k: infer I) => void
? I
: never

export type ExtractInstance<T> = T extends VueClass<infer V> ? V : never

export type MixedVueClass<
Mixins extends VueClass<Vue>[]
> = Mixins extends (infer T)[]
? VueClass<UnionToIntersection<ExtractInstance<T>>>
: never

export function mixins<T extends VueClass<Vue>[]>(...Ctors: T): MixedVueClass<T>
export function mixins (...Ctors: VueClass<Vue>[]): VueClass<Vue> {
return Vue.extend({ mixins: Ctors })
}
Expand Down

0 comments on commit 4c7f651

Please sign in to comment.