@bleco/mixin v0.5.9
@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
4 months ago
5 months ago
5 months ago
10 months ago
7 months ago
8 months ago
6 months ago
7 months ago
9 months ago
8 months ago
8 months ago
10 months ago
9 months ago
9 months ago
9 months ago
11 months ago
11 months ago
1 year ago
12 months ago
12 months ago
11 months ago
12 months ago
1 year ago
12 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago