0.5.9 • Published 4 months ago

@bleco/mixin v0.5.9

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

@bleco/mixin

A more compatible mixin library

The Problem

TypeScript has a mixin pattern. But it does not support base class expressions reference class type parameters. Sometimes, we need to use a mixin with a base class expression reference class type parameters.

TypeScript supports mixin class with decorator. This allows an alternative implementation for mixins that require base class expressions to reference class type parameters. We can use a decorator to apply a mixin to a class.

Installation

npm:

npm i @bleco/mixin

yarn:

yarn add @bleco/mixin

Usage

// respository.ts
export class Repository<T extends object, ID> {
  find(): T[] {
    throw new Error('Method not implemented.');
  }

  findById(id: ID): T {
    throw new Error('Method not implemented.');
  }
}

Define a Mixin:

// foo.mixin.ts
import {Repository} from './repository';

export interface Foo<T extends object, ID> {
  message: string;

  foo(): string;
}

export function FooMixin<T extends object, ID, R extends MixinTarget<Constructor<Repository<T, ID>>>>(superClass: R) {
  return class extends superClass implements Foo<T, ID> {
    message = 'foo';

    foo() {
      return 'foo';
    }
  };
}

@mixin MyRepository with FooMixin:

// my-repository.ts
import {mixin} from '@bleco/mixin';

import {FooMixin} from './foo.mixin';
import {Repository} from './repository';

@mixin(FooMixin)
export class MyRepository<T extends object, ID> extends Repository<T, ID> {}

export interface MyRepository<T extends object, ID> extends Foo<T, ID> {}

License

MIT

0.5.9

4 months ago

0.5.8

5 months ago

0.5.7

5 months ago

0.4.9

10 months ago

0.5.4

7 months ago

0.5.3

8 months ago

0.5.6

6 months ago

0.5.5

7 months ago

0.5.0

9 months ago

0.5.2

8 months ago

0.5.1

8 months ago

0.4.10

10 months ago

0.4.13

9 months ago

0.4.11

9 months ago

0.4.12

9 months ago

0.4.8

11 months ago

0.4.7

11 months ago

0.3.16

1 year ago

0.4.5

12 months ago

0.4.4

12 months ago

0.4.6

11 months ago

0.4.1

12 months ago

0.4.0

1 year ago

0.4.3

12 months ago

0.4.2

12 months ago

0.3.15

1 year ago

0.3.14

1 year ago

0.3.9

1 year ago

0.3.13

1 year ago

0.3.12

1 year ago

0.3.11

1 year ago

0.3.10

1 year ago

0.3.8

1 year ago

0.3.7

1 year ago

0.3.6

1 year ago

0.3.5

1 year ago

0.3.4

1 year ago

0.3.3

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.3.0

2 years ago

0.2.10

2 years ago

0.2.9

2 years ago

0.2.8

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.2.3

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago