Skip to content

Commit

Permalink
Clean up mixin impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Raymond Feng committed May 30, 2017
1 parent d6dd9f8 commit 0dfdc07
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 13 deletions.
15 changes: 4 additions & 11 deletions packages/juggler/src/mixin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@ import {Class, AnyType} from './common';
* Interface for functions that can mix properties/methods into a base class
*/
export interface MixinFunc {
<BC extends Class<{}>>(baseClass: BC): BC;
<BC extends Class<AnyType>>(baseClass: BC): BC;
}

/**
* A builder to compose mixins
*/
export class MixinBuilder {
constructor(public baseClass: Class<AnyType>) {
}
Expand All @@ -24,13 +27,3 @@ export class MixinBuilder {
return new MixinBuilder(baseClass);
}
}


function extend<T extends Class<{}>>(superClass: T, ...mixins: Class<{}>[]): T {
const mixed = class extends superClass {
};
Object.assign(mixed, ...mixins);
const prototypes: Class<{}>[] = mixins.map((c) => c.prototype);
Object.assign(mixed.prototype, ...prototypes);
return mixed;
}
4 changes: 2 additions & 2 deletions packages/juggler/test/unit/mixin/mixin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class BaseClass {
}
}

function Mixin1<T extends Class<{}>>(superClass: T) {
function Mixin1<T extends Class<AnyType>>(superClass: T) {
return class extends superClass {
mixinProp1: string = 'mixinProp1';

Expand All @@ -32,7 +32,7 @@ function Mixin1<T extends Class<{}>>(superClass: T) {
};
}

function Mixin2<T extends Class<{}>>(superClass: T) {
function Mixin2<T extends Class<AnyType>>(superClass: T) {
return class extends superClass {
mixinProp2: string = 'mixinProp2';

Expand Down

0 comments on commit 0dfdc07

Please sign in to comment.