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() }