chekit
3/21/2018 - 10:16 PM

TypeScript Class Mixin

Mixin to implement list of classes to another unity class

class Disposal { 
    public isDisposal: boolean = false;

    public active(): void { 
        this.isDisposal = true;
    }
}

class Active {
    public isActive: boolean = false;

    public activate(): void { 
        this.isActive = true;
    }

    public deactivate(): void { 
        this.isActive = false;
    }
}

class SuperClass implements Disposal, Active { 
    /** Disposal Interface */
    public isDisposal: boolean = false;
    public active: () => void;

    /** Active Interface */
    public isActive: boolean = false;
    public activate: () => void;
    public deactivate: () => void;

    public isActivated(): boolean { 
        return this.isActive;
    }

    public isDisposaled(): boolean { 
        return this.isDisposal;
    }
}
mixin(SuperClass, [Disposal, Active]);

function mixin(baseClass: any, implClasses: any[]) { 
    implClasses.forEach(implClass => {
        Object.getOwnPropertyNames(implClass.prototype).forEach((property: string) => {
            console.log(implClass.prototype);
            baseClass.prototype[property] = implClass.prototype[property];
        });
    });
}

window['supa'] = new SuperClass();