Skip to content

Commit 4c7f651

Browse files
authoredJul 20, 2020
fix: support any number of args on mixins helper (#433)
1 parent 59d1dd4 commit 4c7f651

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed
 

‎src/util.ts

+15-6
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,21 @@ export function createDecorator (factory: (options: ComponentOptions<Vue>, key:
3232
}
3333
}
3434

35-
export function mixins <A> (CtorA: VueClass<A>): VueClass<A>
36-
export function mixins <A, B> (CtorA: VueClass<A>, CtorB: VueClass<B>): VueClass<A & B>
37-
export function mixins <A, B, C> (CtorA: VueClass<A>, CtorB: VueClass<B>, CtorC: VueClass<C>): VueClass<A & B & C>
38-
export function mixins <A, B, C, D> (CtorA: VueClass<A>, CtorB: VueClass<B>, CtorC: VueClass<C>, CtorD: VueClass<D>): VueClass<A & B & C & D>
39-
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>
40-
export function mixins <T> (...Ctors: VueClass<Vue>[]): VueClass<T>
35+
export type UnionToIntersection<U> = (U extends any
36+
? (k: U) => void
37+
: never) extends (k: infer I) => void
38+
? I
39+
: never
40+
41+
export type ExtractInstance<T> = T extends VueClass<infer V> ? V : never
42+
43+
export type MixedVueClass<
44+
Mixins extends VueClass<Vue>[]
45+
> = Mixins extends (infer T)[]
46+
? VueClass<UnionToIntersection<ExtractInstance<T>>>
47+
: never
48+
49+
export function mixins<T extends VueClass<Vue>[]>(...Ctors: T): MixedVueClass<T>
4150
export function mixins (...Ctors: VueClass<Vue>[]): VueClass<Vue> {
4251
return Vue.extend({ mixins: Ctors })
4352
}

0 commit comments

Comments
 (0)
Please sign in to comment.