From 62214fa42e09a9175c45b46a2485d42278f4e05e Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 16 Oct 2018 10:50:23 -0400 Subject: [PATCH] feat: allow mixins to accept generics --- packages/core/src/optional/mixin.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core/src/optional/mixin.ts b/packages/core/src/optional/mixin.ts index 0fbd7fca6..7b56416a5 100644 --- a/packages/core/src/optional/mixin.ts +++ b/packages/core/src/optional/mixin.ts @@ -4,6 +4,10 @@ interface ComponentConstructor { new (): This } +interface ComponentConstructorWithMixins { + new

(): This & { $data: D } & D & { $props: Readonly

} & P +} + // mind = blown // https://stackoverflow.com/questions/50374908/transform-union-type-to-intersection-type type UnionToIntersection = (U extends any @@ -17,9 +21,9 @@ type ExtractInstance = T extends (infer U)[] : never export function mixins< - T extends ComponentConstructor[], + T extends ComponentConstructor[] = [], V = ExtractInstance ->(...args: T): ComponentConstructor +>(...args: T): ComponentConstructorWithMixins export function mixins(...args: any[]): any { // TODO } @@ -38,10 +42,11 @@ class Bar extends Component<{ bar: string }> { } } -class Baz extends mixins(Foo, Bar) { +class Baz extends mixins(Foo, Bar)<{ baz: number }> { created() { this.foo this.bar + this.baz this.test() this.ok() }